首页 文章

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

提问于
浏览
3

在我的核心数据模型中,我有一个配置文件实体,其中包含多个多对多关系 . 其中一个是'寻找' . 许多配置文件可以寻找许多不同的东西 .

Core Data中的关系将其Delete Rule设置为Nullify . 我想要发生的是,当删除 Profiles 时,所有搜索条目都不受影响,并且当删除搜索条目时,应该从每个人的 Profiles 中删除它 .

这似乎我应该对Profile和Looking For之间关系的两个方向都做不动作,但是从谷歌搜索和阅读文档,我不确定这是否正确,事实上,没有动作似乎是你几乎要做的事情除非你进行大量优化,否则永远不要使用 . 这是文档:

无操作对关系目的地的对象不执行任何操作 . 例如,如果您删除某个部门,请将所有员工保持原样,即使他们仍然认为他们属于该部门 . 没有使用No Action规则的原因就不那么明显了,因为如果你使用它,你就有可能让对象图处于不一致的状态(员工与被删除的部门有关系) . 如果使用“无操作”规则,则需要确保维护对象图的一致性 . 您有责任将任何反向关系设置为有意义的值 . 在您具有多对多关系并且目的地可能存在大量对象的情况下,这可能是有益的 .

所以我觉得我应该使用Nullify(我目前正在使用),但是Nullify的文档说:

Nullify将目标对象的反向关系设置为null . 例如,如果删除部门,请将所有当前成员的部门设置为null . 只有当员工的部门关系是可选的,或者您确保在下一次保存操作之前为每个员工设置新部门时,这才有意义 .

现在,正如所写,这似乎意味着如果你删除一个配置文件,那个与该配置文件相关联的每个寻找将与配置文件清空,即从所有配置文件中删除 .

在这种情况下,正确的做法是什么?

1 回答

  • 6

    "Nullify"是对的 . 假设配置文件 p1 与Looking Fors l1l2l3 相关 . 如果删除了 p1 且关系设置为Nullify,则只会从 l1l2l3 中的反向关系中删除 p1 .

    使用"No Action"时, l1l2l3 中的反比关系将保持不变,因此指向不存在的元素 p1 . 您必须从这些对象中删除 p1 "manually" .

    换句话说,"Nullify"是保持对象图一致的最简单规则:如果 ab 相关,并且 b 被删除,那么 b 将再次与 a 无关 .

相关问题