CoreData 多对多关系插入和删除操作

Posted

技术标签:

【中文标题】CoreData 多对多关系插入和删除操作【英文标题】:CoreData many to many relationship insert and delete operations 【发布时间】:2014-09-08 08:29:37 【问题描述】:

我有一个关于 CoreData 关系的问题。

我有这种情况:

我有 DOG 和 BONE 实体。

每只狗可以有更多的骨头。 每个骨头可以有更多的狗。

所以我需要多对多关系。

如何在 CoreData 中设置报表删除?什么样的?

我想我需要这样的东西:

当我删除 BONE 时,我不必移除 DOG; 删除 DOG 时,如果使用的是 DOG 的 BONE,则无需移除 BONE。 当我删除一只狗时,如果这些骨头只用于这只狗,我必须删除这些骨头。

如果我强加这种关系类型,CoreData 的这种机制是自动的吗?

关于插入?

例如:我需要插入带有一些骨骼的 DOG:如何检查骨骼是否已经存在? 我桌子上的每一根骨头都有一个 ID

【问题讨论】:

【参考方案1】:

首先,很难理解您的示例,因为它没有直观意义。话虽如此,忽略实体类型,如果您有一个具有相互对多关系(多对多)的实体 A 和 B。

Apple: Relationships and Fetched Properties

(为简洁起见,假设下面的“实体”=“实体实例”)

插入:

您必须同时插入实体 A 和插入实体 B。核心数据不会 如果您创建实体 A,则自动创建实体 B,只是因为它们有关系 如果您希望将现有实体 B 关联到新实体 A,则 您必须插入实体 A,然后通过 关系。仅仅因为您在对象模型中定义了关系,并不意味着当您插入对象时它们会自动关联。你需要明确地这样做

删除:

Coredata 将允许您设置“关系删除规则”。这将控制当您在关系的一端删除对象时会发生什么。您必须在每一端设置规则,因为您可以选择删除实体 A 或实体 B。删除规则包括:拒绝、无效、级联、无操作。查看 Apple 的相关文档,为您解答上述问题(很清楚)。 要将您的示例应用于删除规则:

当我删除 BONE 时,我不必删除 DOG; (无动作) 当我删除一只狗时,如果它是从狗身上使用的,我不必删除骨头。 (拒绝或无效) 当我删除一只狗时,如果这些骨头只用于这只狗,我必须删除这些骨头。 (级联)

【讨论】:

以上是关于CoreData 多对多关系插入和删除操作的主要内容,如果未能解决你的问题,请参考以下文章

CoreData 多对多关系

删除 NSManagedObject 子类不会取消它的多对多关系

Entity Framework 6 Recipes 2nd Edition(10-9)译 -> 在多对多关系中为插入和删除使用存储过程

核心数据多对多关系的正确删除规则?

CoreData:使用 NSPredicate 过滤一对多对多关系(此处不允许错误对多键)

CoreData 性能:基于多对多关系