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

时间:2013-11-06 20:17:28

标签: objective-c core-data

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

核心数据中的关系将其删除规则设置为Nullify。我想要发生的是,当删除个人资料时,所有搜索条目都不受影响,并且当删除搜索条目时,应该从每个人的个人资料中删除它。

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

  

无动作   对目标处的对象不执行任何操作   关系。例如,如果删除部门,请保留所有部门   员工就像他们一样,即使他们仍然相信他们属于那个   部。

     

为什么No Action规则可能会被使用,这是不太明显的,因为如果   你使用它,你有可能将对象图留在一个   不一致的状态(与删除关系的员工   省)。

     

如果使用No Action规则,则由您来确保对象图的一致性   维持。您有责任将任何反向关系设置为有意义的值。   这可能对您有多对多关系并且可能存在关联的情况有益   目的地有大量物品。

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

  

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

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

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

1 个答案:

答案 0 :(得分:6)

“Nullify”是正确的。假设个人资料p1与寻找F l1l2l3相关。如果删除p1并且关系设置为Nullify,则仅 我会从p1l1l2中的反向关系中删除l3

使用“无操作”时,l1l2l3中的反比关系将保持不变, 因此指向一个不存在的元素p1。您必须删除p1 “手动”从这些对象。

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