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