将来自不同表(实体)的 2 个特定托管对象与 Core Data 保持关联的最佳方法是啥?

Posted

技术标签:

【中文标题】将来自不同表(实体)的 2 个特定托管对象与 Core Data 保持关联的最佳方法是啥?【英文标题】:What is the best way to keep association between 2 specific managed objects from different tables(entities) with Core Data?将来自不同表(实体)的 2 个特定托管对象与 Core Data 保持关联的最佳方法是什么? 【发布时间】:2017-02-20 15:04:16 【问题描述】:

在我的应用中,我有 2 个实体:

项目: 项目 ID:Int64 标题:字符串? 地址:字符串? 开始日期:日期 endDate: 日期 ...

用户: 用户 ID:Int64 电子邮件:字符串? 名字:字符串? 姓氏:字符串? 电话号码:字符串?

并且我需要在特定时间间隔内保持特定用户和特定项目之间的关联,特别是我需要知道哪个项目在哪个时间间隔内属于(分配给)哪个用户。 因此,我需要一个名为 Timetable 的第三个实体。

到目前为止,我有这个:时间表: 项目 ID:Int64 用户 ID:Int64 开始日期:日期 endDate: 日期

另一种可能的解决方案是 Timetable 实体与 Project 对象具有一对一关系,与 User 对象具有一对一关系,其中仅包含 startDate 和 endDate 属性其他相关数据。 像这样:时间表

同步状态:Int16 创建时间:日期 开始日期:日期 endDate: 日期 项目:项目(一对一) 用户:用户(一对一)

但是在这样做时,我需要为这两种一对一关系设置什么逆向关系?(我是否还需要为每个项目和每个用户实体添加一个时间表:时间表一对一关系并设置它与时间表实体中的 2 个相反?)

我还提到我正在将 mysql 用于我的后端服务器,并且我下载了这些 userId、projectId 作为主键。

所以我的问题是:在不同属性(在我的情况下为时间间隔)的不同表(实体)的 2 个特定表记录(托管对象)与核心数据之间保持关联的最佳做法是什么?

【问题讨论】:

【参考方案1】:

此数据模型应该适用于您的用例:

Timetable 上的

projectuser 属性都是 To One 关系。 timetableEntriesProjectUser 上都是To Many 关系。

【讨论】:

以上是关于将来自不同表(实体)的 2 个特定托管对象与 Core Data 保持关联的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

状态恢复和托管对象崩溃

实体框架5与Oracle表/视图不存在不一致?

iOS核心数据:存储与不同实体中任何NSManagedObject的关系

核心数据 - 托管对象问题

当属性值来自引用表时,应该如何填充实体(bean)对象属性?

何时需要获取PermanentIDsForObjects:error:?来自2个不同的班级?