【发布时间】:2011-01-08 14:28:40
【问题描述】:
我有一个核心数据模型,它具有三个实体: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 的总数比删除前少 1 个)。但是,B 的数量保持不变。所以,“级联”删除规则似乎没有得到遵守。
我知道我可以手动通过 A -> B 关系,并手动删除每个 B。但是,这似乎是 Core Data 免费提供的东西,所以我不想这样做,除非 Core Data 是不足的。欢迎提供有关使用“级联”删除规则的任何信息。
【问题讨论】:
-
为什么不想删除引用 B 与已删除 A 关联的 C?
标签: cocoa core-data data-modeling cascade