【问题标题】:How to properly cascade delete managed objects in Core Data?如何在 Core Data 中正确级联删除托管对象?
【发布时间】: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 实体执行删除时遇到问题。我想要发生的事情如下:

  1. 我删除了 A 的一个实例(使用 deleteObject:
  2. 删除传播到与 A 关联的任何 B(由于“级联”删除规则)
  3. 与 A 关联的所有 B 都被删除
  4. 所有属于 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


【解决方案1】:

我当然不是核心数据专家,但是阅读documentation on the various delete rule options,在我看来,您希望 B -> C 关系无效,而不是 No Action 。也许 B 不会消失,因为 C 仍然持有对它们的引用?

【讨论】:

  • 你帮我指明了正确的方向。 Nullify 正确删除引用。删除后我仍然遇到一些问题,但我相信这是我的逻辑/数据模型中的问题。
  • 您好,链接已损坏。
  • 核心数据编程指南最近有了一些非常重要的变化(也丢失了很多内容,唉)。更新了链接。
【解决方案2】:

基于

任何属于 C 的关系,其关联的 B 已被删除, 也被删除 建议 B-C 也应该有 Cascade。

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

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

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

就像这张获胜的抽奖一样。

A--->>B 级联

B--->>C级联

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 2010-11-11
    相关资源
    最近更新 更多