Core Data 中的多重逆关系

Posted

技术标签:

【中文标题】Core Data 中的多重逆关系【英文标题】:Multiple inverse relationships in Core Data 【发布时间】:2011-09-02 03:58:30 【问题描述】:

我有一个实体库,其中包含两个书籍列表。图书馆维护这两个书籍清单很重要。在我的图书馆实体上,我有一个从每个列表到我的书实体的一对多关系。同样,Book 有一个关系“库”。我在从数据库中删除数据时遇到了一些问题,我读到我应该建立反向关系以帮助数据完整性。然而,在这种情况下,一本书希望能够与我的图书馆实体上的每个列表建立反向关系。我怎样才能做到这一点?

我天真的第一个想法是为两个列表实现关系。所以一本书有一个关系“libraryForList1”和“libraryForList2”,所以它可以对每个关系都有一个逆。我永远不必实际引用这些属性,因为根据 Core Data 规范,如果我将一本书添加到某个图书馆列表中,它会自动将图书馆设置为该书的所有者。

【问题讨论】:

请参阅 ***.com/questions/4985075/… 等。如果您的图书馆可以以两种不同的方式拥有图书,那么一本书可以以两种不同的方式属于图书馆,并且都需要单独建模。 【参考方案1】:

您的“幼稚的第一个想法”基本上是正确的:如果您的 Library 实体与 Books 有两个一对多的关系(为清楚起见,我们将关系称为 ownedBooksborrowedBooks),那么您的 Book 实体应该必须-one 反向关系(owningLibraryborrowingLibrary)然后 Core Data 将使您的生活更轻松。

您可能还需要考虑这些关系的删除规则:如果一本书因某种原因被删除,owningLibraryborrowingLibrary 的删除规则很可能是 Nullify –也就是说,两个图书馆都会从他们的列表中删除这本书。删除仍然有 Books 的图书馆似乎是个坏主意,所以 ownedBooksborrowedBooks 的删除规则应该是 Deny: 在所有书籍都被计入之前,不能删除图书馆for(并从库中删除)。

【讨论】:

以上是关于Core Data 中的多重逆关系的主要内容,如果未能解决你的问题,请参考以下文章

Core Data 关系可以是它自己的逆关系吗?

Core Data 自反对多关系

Core Data 中的关系同步

如何获取 Core Data 中的关系项属性?

减少 Core Data 中的关系数量

如何快速获取 Core Data 中的关系