如何处理 CORE DATA 中的一对多关系

Posted

技术标签:

【中文标题】如何处理 CORE DATA 中的一对多关系【英文标题】:How to handle a one-to-many relationship in CORE DATA 【发布时间】:2014-07-04 07:38:26 【问题描述】:

我在使用一对一和一对多关系的核心数据中遇到问题。

1.让我们考虑一个父实体P1 和子实体C1,C2,C3

2。 C3 还有 3 个子实体 C31,C32,C33

3。如果我在C32 表中更新、删除或更改,我将从服务器获取父P1 的完整JSON。

有什么方法可以更改特定父表的所有子表? 基本上,如果在子表中进行任何更新或删除或更改,我将从服务器获取一个包含所有子表详细信息的新父表。

有没有办法在核心数据中处理这个问题?

【问题讨论】:

【参考方案1】:

除了在 Core Data 中处理关系之外,您的问题还在于如何使通过基于 JSON 的 API 公开的远程数据库与您的本地 Core Data 镜像保持同步。

在您描述的场景中,天真的方法是:

    您从服务器获得完整的 JSON;

    通过这个,识别您的父实体(例如基于其 ID);

    从本地数据库中删除父实体;如果你正确设置你的模型,所有的孩子也会被删除;

    重新创建实体及其所有子实体。

另一种可能的方法是获取完整的 JSON,然后将 JSON 中的每个子项与 Core Data 中的每个子项进行比较,并删除那些不存在于 JSON 中的子项。

最后,您可以考虑RestKIT,这是一个可以为您完成所有这些工作的框架——还有一些学习曲线,但它会为您处理所有细节。

【讨论】:

核心数据是否有任何可以处理的属性。因为我的服务器端他们正在使用名为 orphanRemoval 的属性。 Hibernate 中的orphanRemoval 是完全特定于ORM 的东西。当不再从“父”实体引用时,它标记要删除的“子”实体,例如当您从父实体的相应集合中删除子实体时。 我们在 coredata 中有类似的东西吗? 恐怕CoreData里没有orphanRemoval这样的东西。如果它只是另一个属性,您可以将其添加到您的实体中并进行相应的管理(但不会自动为您完成)。

以上是关于如何处理 CORE DATA 中的一对多关系的主要内容,如果未能解决你的问题,请参考以下文章

如何处理一对多关系中的嵌套 mongoose 查询和异步问题?

如何为一对多关系正确配置 Core Data 数据模型和 NSManagedObject?

Spring JDBC中的多个一对多关系

Entity Framework Core - 如何处理相关实体映射和保存

如何管理 Core Data 中的一对多关系?

如何处理多层1对多关系的DAL?