16

我有一个核心数据模型,它具有三个实体:A、B 和 C。A 与 B 具有一对多关系,B 与 C 具有多对多关系。A 的删除规则 -> B 是“级联”,B -> A 是“无动作”。B -> C 的删除规则是“No Action”,C -> B 是“Deny”。

我在对 A 实体执行删除时遇到问题。我想要发生的是以下情况:

  1. 我删除了 A 的一个实例(使用deleteObject:
  2. 删除传播到与 A 关联的任何 B(由于“级联”删除规则)
  3. 所有与 A 关联的 B 都被删除
  4. 属于 C 且其关联 B 已被删除的任何关系也将被删除

这可能有点令人困惑,所以让我解释一下:当一个 A 被删除时,删除所有关联的 B。并且任何引用那些 B 的 C 都不能再引用它们。

在我的测试中,我根本没有看到“级联”删除规则对我有用。当我删除一个 A 时,我processPendingChanges会立即调用(只是为了确保删除已经完成)。然后我比较删除之前和之后在 NSManagedObjectContext 中的 A 和 B 的数量。A 的实例已被正确删除(现在 A 的总数比删除前少一个)。但是,B 的数量保持不变。因此,似乎没有遵守“级联”删除规则。

我知道我可以手动通过 A -> B 关系,并手动删除每个 B。但是,这似乎是 Core Data 免费提供的东西,所以我不想这样做,除非 Core Data 不够。欢迎提供有关使用“级联”删除规则的任何信息。

4

2 回答 2

17

我当然不是核心数据专家,但是阅读有关各种删除规则选项的文档,在我看来,您希望 B -> C 关系为Nullify,而不是No Action。也许 B 不会消失,因为 C 仍然持有对它们的引用?

于 2010-01-23T18:00:05.243 回答
1

基于

任何属于 C 的关系,其关联的 B 已被删除,也将被删除 建议 BC 也应该具有级联。

此外,如果 B 被删除,那么 C 也应该被删除。再次级联。

  • Nullify 通常用作反向删除规则*

IE。Bs 与 A 的关系是无效的。C 与 B 的关系是无效的。这样当 C 被删除时,B 不会被删除。而当 B 被删除时;A 未被删除。

就像在这张获胜的图画中一样。

A--->>B级联<----无效

B--->>C级联<----无效

于 2013-05-11T01:59:58.200 回答