在我的核心数据模型中,我有一个配置文件实体,其中包含多个多对多关系 . 其中一个是'寻找' . 许多配置文件可以寻找许多不同的东西 .
Core Data中的关系将其Delete Rule设置为Nullify . 我想要发生的是,当删除 Profiles 时,所有搜索条目都不受影响,并且当删除搜索条目时,应该从每个人的 Profiles 中删除它 .
这似乎我应该对Profile和Looking For之间关系的两个方向都做不动作,但是从谷歌搜索和阅读文档,我不确定这是否正确,事实上,没有动作似乎是你几乎要做的事情除非你进行大量优化,否则永远不要使用 . 这是文档:
无操作对关系目的地的对象不执行任何操作 . 例如,如果您删除某个部门,请将所有员工保持原样,即使他们仍然认为他们属于该部门 . 没有使用No Action规则的原因就不那么明显了,因为如果你使用它,你就有可能让对象图处于不一致的状态(员工与被删除的部门有关系) . 如果使用“无操作”规则,则需要确保维护对象图的一致性 . 您有责任将任何反向关系设置为有意义的值 . 在您具有多对多关系并且目的地可能存在大量对象的情况下,这可能是有益的 .
所以我觉得我应该使用Nullify(我目前正在使用),但是Nullify的文档说:
Nullify将目标对象的反向关系设置为null . 例如,如果删除部门,请将所有当前成员的部门设置为null . 只有当员工的部门关系是可选的,或者您确保在下一次保存操作之前为每个员工设置新部门时,这才有意义 .
现在,正如所写,这似乎意味着如果你删除一个配置文件,那个与该配置文件相关联的每个寻找将与配置文件清空,即从所有配置文件中删除 .
在这种情况下,正确的做法是什么?
1 回答
"Nullify"是对的 . 假设配置文件
p1
与Looking Forsl1
,l2
,l3
相关 . 如果删除了p1
且关系设置为Nullify,则只会从l1
,l2
,l3
中的反向关系中删除p1
.使用"No Action"时,
l1
,l2
,l3
中的反比关系将保持不变,因此指向不存在的元素p1
. 您必须从这些对象中删除p1
"manually" .换句话说,"Nullify"是保持对象图一致的最简单规则:如果
a
与b
相关,并且b
被删除,那么b
将再次与a
无关 .