Core Data中设置实体间关系的原因

Posted

技术标签:

【中文标题】Core Data中设置实体间关系的原因【英文标题】:Reason for setting relationships among entities in Core Data 【发布时间】:2014-05-22 08:50:21 【问题描述】:

在了解了 Core Data 中实体之间的关系之后。我看不出在两个实体之间建立关系的真正原因。如果其中一个实体包含可以通过具有NSManagedObject 类型的属性来容纳另一个实体的属性,则它们可以单独连接。

@property (nonatomic, strong ) NSManagedObject *AssetType;

【问题讨论】:

【参考方案1】:

这是一个您必须了解的概念:Core Data 不是数据库,而是对象图管理器,并且作为第二个功能,它提供持久性(例如,使用 Sqlite 存储)。

也就是说,如果你有两个独立的实体,并且你需要根据属于另一个实体的条件来检索值,你需要运行两个请求并在内存中过滤结果。相反,如果你建立了一个关系,你可以创建一个带有特定谓词的请求,让 Core Data 为你检索正确的结果。此外,通过关系,您可以访问属于另一个实体的对象,就像访问属性对象一样简单。例如,下面的 sn-p 表示基于entityA,我可以访问一个名为someRelationship 的属性,该属性允许检索一个(或多个)EntityB 类型的实体。如果someRelationship 已设置为多对多,您将收到一个或多个EntityB 实体。

entityB = entityA.someRelationship;

真正的建议是考虑对象图!!!

进一步参考:Core Data Overview by objc.io。

更新 1

另一大优势是关系允许您利用删除规则,并且通过反向关系,您可以保持图表的完整性。

见Relationships and Fetched Properties。

【讨论】:

以上是关于Core Data中设置实体间关系的原因的主要内容,如果未能解决你的问题,请参考以下文章

Core Data 实体关系层次结构

如何从 Core Data 中的关系相关实体获取属性?

如何在 Core Data 中设置一对多关系的排序?

在 Core Data 中设置数字属性时遇到问题

Core Data 中的排序顺序具有多重关系

如何在 Mac 应用程序中设置初始 Core Data 存储?