Множественные обратные отношения в Core Data

У меня есть библиотека сущностей, в которой есть два списка книг. Важно, чтобы библиотека поддерживала эти два списка книг. В моей сущности «Библиотека» у меня есть отношение от одного ко многим из каждого списка к моей сущности «Книга». Точно так же книга имеет отношение «библиотека». У меня возникли проблемы с удалением моих данных из базы данных, и я прочитал, что мне следует установить обратные отношения, чтобы помочь с целостностью данных. Однако в этом случае для Книги может потребоваться установить обратную связь с каждым списком в моем объекте «Библиотека». Как я могу этого добиться?

Моя наивная первая мысль - реализовать отношения для обоих списков. Таким образом, у книги есть отношения «libraryForList1» и «libraryForList2», так что они могут иметь обратные отношения для каждой связи. Мне никогда не придется на самом деле ссылаться на эти свойства, потому что, согласно спецификации Core Data, если я добавляю книгу в один из списков библиотек, она автоматически устанавливает библиотеку в качестве владельца этой книги.


person JPC    schedule 02.09.2011    source источник
comment
См. stackoverflow.com/questions/4985075/, среди прочих. Если ваша библиотека может владеть книгами двумя разными способами, то книга может принадлежать библиотеке двумя разными способами, и оба должны моделироваться отдельно.   -  person rgeorge    schedule 02.09.2011


Ответы (1)


Ваша «наивная первая мысль» по сути верна: если у вашей сущности «Библиотека» есть два отношения «один-ко-многим» с Книгами (для ясности назовем отношения ownedBooks и borrowedBooks), тогда ваша сущность «Книга» должна иметь обратные отношения «к одному» (owningLibrary и borrowingLibrary), а затем Core Data сделают вашу жизнь проще.

Вам также может потребоваться подумать о правилах удаления для этих отношений: если Книга по какой-то причине удалена, правила удаления для owningLibrary и borrowingLibrary, скорее всего, будут Nullify, то есть обе библиотеки удалят Книга из их списков. Удаление библиотеки, в которой все еще есть книги, кажется плохой идеей, поэтому, возможно, правилом удаления для ownedBooks и borrowedBooks должно быть Запретить: нельзя удалить библиотеку, пока все книги не будут учтены (и удалены из библиотеки).

person Scott Forbes    schedule 02.09.2011