如何使用 Core Data 中多个实体的属性获取属性值?

Posted

技术标签:

【中文标题】如何使用 Core Data 中多个实体的属性获取属性值?【英文标题】:How to fetch property values using attribute from multiple entities in Core Data? 【发布时间】:2011-08-03 09:12:54 【问题描述】:

我有三个这样的实体。

员工: 身份证 名称 员工部门: 身份证 部门ID 员工ID 部门: 身份证 名称 员工员工部门>部门 假设员工和部门具有多对多关系, 我想获取“会计”部门的所有员工姓名? 如果我使用 SQL 查询,我将简单地使用:select employee.name from Employee, EmployeeDepartment, Department where employee.id = employeeDepartment.employeeID and Department.id = EmployeeDepartment.departmentID and Department.name = 'Accounting ' 但是,如何在 Core Data 中做同样的事情?

【问题讨论】:

【参考方案1】:

Core Data 是一个对象图管理器,而不是关系数据库,因此试图强制它进入关系数据库模式会导致痛苦。您的 EmployeeDepartment 实体就是一个很好的例子;您需要在关系数据库中实现 Employee 和 Department 之间的多对多关系,但在 Core Data 中根本没有必要。相反,只需给 Employee 一个 departments 属性和 Department 一个 employees 属性,然后在两个实体之间添加多对多关系。

现在,如果您想获取 Accounting 中的所有员工,您可以使用与 Accounting 匹配的谓词对实体 Department 执行获取请求。拥有该对象后,您只需访问其employees 属性即可获取员工列表。

【讨论】:

由于实体部门由许多员工组成,因此有许多部门对象包含相同的department.name,但具有不同的department.employees。如果Accounting部门有10个员工,实体Department中是否有10个对象同名“Accounting”? 抱歉——错过了多对多关系。那么一名员工可以同时属于多个部门吗?看起来应该是一对多的关系:一个部门可以有很多员工,但任何给定的员工只有一个部门。不过,要回答您的问题……不,如果会计部门有十名员工,那么您仍然只有一个会计部门。 employees 属性的值是一个包含该部门所有员工的集合。 有时一名员工会拥有多个部门,因为他可能是管理多个部门的经理。好吧,我很难拥有一个属性“员工”,它是一个集合。我使用 GUI builder 在 xcode 中添加属性。它只允许我使用 Integer、String、Date 等...所以,你是在建议我应该放弃那个 builder 吗? 不,一点也不。只需通过选择关系并选中检查器中的“多对多关系”复选框来使属性“多对多”。 哇,我现在可以看到NSSet,在我生成了 NSManagedObject 子类之后。我明白你现在的意思了。您建议两个对象都维护一个相关对象列表以创建多对多关系。

以上是关于如何使用 Core Data 中多个实体的属性获取属性值?的主要内容,如果未能解决你的问题,请参考以下文章

IOS/objective-c/core-data:如何从相关实体获取属性

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

如何从Core Data中的字符串获取Processed字符串

Core Data 获取仅具有唯一属性的实体

在单个 NSTableView (Core-Data) 中显示来自多个实体的数据

Xcode 4 Core Data:如何使用在数据模型编辑器中创建的获取属性