抽象实体上的核心数据关系

Posted

技术标签:

【中文标题】抽象实体上的核心数据关系【英文标题】:Core Data Relationships on Abstract Entities 【发布时间】:2012-06-25 15:37:17 【问题描述】:

当一个实体设置为抽象时,在两个实体之间创建一对一关系是否合法?

【问题讨论】:

【参考方案1】:

抽象实体并不意味着被实例化。这就是为什么您不能建立这样的关系。但是,您可以做的是创建一个实体从抽象实体继承的关系。

来自Apple's docs:

关系指定实体或父实体 目的地的对象。这可以与在 来源(自反关系)。关系不一定是 同质。如果 Employee 实体有两个子实体,比如 Manager 和 Flunky,那么给定部门的员工可能由 员工(假设员工不是抽象实体)、经理、 Flunkies,或其任意组合。

编辑: 显然你可以创建这样的关系(这样子实体也可以继承关系)......

如果您定义实体继承层次结构(请参阅“实体 继承”),当您将超实体指定为 获取请求,请求返回所有匹配的实例 超实体和子实体。在某些应用程序中,您可能 将超实体指定为抽象的(参见“抽象实体”)。到 获取摘要的所有具体子实体的匹配实例 实体,您将获取规范的实体设置为抽象 实体。对于“抽象实体”中描述的域,如果 您使用 Graphic 实体指定获取请求,获取返回 Circle、TextArea 和 Line 的匹配实例。

另请参阅此答案:Core Data: Abstract Entity in Fetch Request

【讨论】:

引用错误。 “假设 Employee 不是抽象实体”写在括号中,因为如果 Employee 是抽象的,它就不能出现在Employees 关系中。事实上,这一段证实了这是可能的,因为它说关系不必是同质的。我在很多情况下都使用抽象实体作为关系中的目标。 我最初的理解与 Alladinian 的相同,尽管我也曾与和 Paul de Lange 持相同观点的开发人员交谈过。因此,如果我们有一个与 Employee 具有 oneToMany 关系的 Person(Abstract)。这意味着 Employee 可以请求其 Person ,这将需要创建一个 Person 。这将起作用,因为 Objective-C 不会像 Java 那样将类强制为抽象类,但这是正确的做法吗?那为什么还要费心将 Person 定义为抽象的呢? 一个员工有很多人?多么令人困惑的例子......无论如何,您需要考虑实体而不是类。它是一个抽象实体而不是抽象类。您的类只是实体的编程表示。与您提到的 Java 不同,Obj-C 中没有抽象类。它在文档中解释了为什么要使用此功能。【参考方案2】:

是的。你可以拥有一个拥有“东西”的人......

【讨论】:

以上是关于抽象实体上的核心数据关系的主要内容,如果未能解决你的问题,请参考以下文章

如何创建父实体和关系的核心数据模型

核心数据父实体

核心数据过滤器抽象实体

核心数据迁移:将字段提取到抽象实体子项

NSPredicate 不适用于核心数据中的抽象实体属性

抽象实体的核心数据通用属性类型