4

在我的核心数据模型中,我有一个具有几个多对多关系的 Profile 实体。其中之一是“寻找”。许多配置文件可以寻找许多不同的东西。

Core Data 中的关系将其删除规则设置为 Nullify。我想要发生的是,当一个配置文件被删除时,所有正在寻找的条目都不会受到影响,而当一个正在寻找的条目被删除时,它应该从每个人的配置文件中删除。

这似乎我应该对 Profile 和 Find For 之间的关系的两个方向都执行 No Action,但是通过谷歌搜索和阅读文档,我不确定这是正确的,实际上 No Action 似乎是你几乎会做的事情除非您进行大量优化,否则永远不想使用。这是文档:

无操作 对关系目标处的对象不执行任何操作。例如,如果您删除一个部门,请让所有员工保持原样,即使他们仍然认为自己属于该部门。

使用无操作规则的原因不太明显,因为如果使用它,您可能会使对象图处于不一致的状态(员工与已删除的部门有关系)。

如果您使用 No Action 规则,则由您来确保保持对象图的一致性。您负责将任何反向关系设置为有意义的值。在您具有一对多关系并且目的地可能有大量对象的情况下,这可能会有所帮助。

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

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

现在,正如所写,这似乎暗示如果您删除一个配置文件,则与该配置文件关联的每个查找都将与配置文件的关系清空,即从所有配置文件中删除。

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

4

1 回答 1

6

“作废”是正确的。假设 Profilep1与 Look Fors l1l2、相关l3。如果p1被删除并且关系设置为 Nullify,则只会 p1从 , , 中的逆关系l1l2删除l3

l1使用“无动作”, 、l2、中的逆关系l3将保持不变,因此指向不存在的元素p1。您必须p1 从这些对象中“手动”删除。

换句话说,“Nullify”是保持对象图一致的最简单规则:如果a与 相关b,并且b被删除,则b不再相关a

于 2013-11-06T20:31:59.107 回答