我有一个核心数据模型,它具有三个实体:A、B 和 C。A 与 B 具有一对多关系,B 与 C 具有多对多关系。A 的删除规则 -> B 是“级联”,B -> A 是“无动作”。B -> C 的删除规则是“No Action”,C -> B 是“Deny”。
我在对 A 实体执行删除时遇到问题。我想要发生的是以下情况:
- 我删除了 A 的一个实例(使用
deleteObject:
) - 删除传播到与 A 关联的任何 B(由于“级联”删除规则)
- 所有与 A 关联的 B 都被删除
- 属于 C 且其关联 B 已被删除的任何关系也将被删除
这可能有点令人困惑,所以让我解释一下:当一个 A 被删除时,删除所有关联的 B。并且任何引用那些 B 的 C 都不能再引用它们。
在我的测试中,我根本没有看到“级联”删除规则对我有用。当我删除一个 A 时,我processPendingChanges
会立即调用(只是为了确保删除已经完成)。然后我比较删除之前和之后在 NSManagedObjectContext 中的 A 和 B 的数量。A 的实例已被正确删除(现在 A 的总数比删除前少一个)。但是,B 的数量保持不变。因此,似乎没有遵守“级联”删除规则。
我知道我可以手动通过 A -> B 关系,并手动删除每个 B。但是,这似乎是 Core Data 免费提供的东西,所以我不想这样做,除非 Core Data 不够。欢迎提供有关使用“级联”删除规则的任何信息。