核心数据多对多关系的正确删除规则?
Posted
技术标签:
【中文标题】核心数据多对多关系的正确删除规则?【英文标题】:Correct Delete Rule for Core Data Many-to-Many Relationship? 【发布时间】:2013-11-06 20:17:28 【问题描述】:在我的核心数据模型中,我有一个 Profile 实体,其中包含多个多对多关系。其中之一是“寻找”。许多个人资料可能会寻找许多不同的东西。
Core Data 中的关系将其删除规则设置为无效。我想要发生的是,当一个配置文件被删除时,所有正在寻找的条目都不会受到影响,而当一个正在寻找的条目被删除时,它应该从每个人的配置文件中删除。
这似乎我应该对 Profile 和 Find For 之间关系的两个方向都执行 No Action,但是通过谷歌搜索和阅读文档,我不确定这是正确的,实际上 No Action 似乎是什么除非您进行大量优化,否则您几乎永远都不想使用。这是文档:
无操作 对目的地的对象不做任何事情 关系。例如,如果您删除一个部门,则保留所有 员工,即使他们仍然相信自己属于那个 部门。
“无操作”规则可能有用的原因不太明显,因为如果 你使用它你有可能将对象图留在一个 不一致的状态(与已删除的员工有关系的员工 部门)。
如果您使用 No Action 规则,则由您来确保对象图的一致性 得到维护。您负责将任何反向关系设置为有意义的值。 这在您有一对多关系并且可能存在 目的地有大量物体。
所以我觉得我应该改用 Nullify(我目前正在使用),但 Nullify 的文档说:
无效 将目标对象的逆关系设置为 空值。例如,如果您删除一个部门,请将部门设置为 所有当前成员为空。这只有在 员工的部门关系是可选的,或者如果您确保 之前为每个员工设置了一个新部门 下次保存操作。
现在,正如所写的那样,这似乎意味着如果您删除个人资料,与该个人资料相关联的每个“寻找”都将清空其与个人资料的关系,即从所有个人资料中删除。
在这种情况下正确的做法是什么?
【问题讨论】:
【参考方案1】:“无效”是正确的。假设 Profile p1
与 Look Fors l1
、l2
、l3
相关。如果 p1
被删除并且关系被设置为 Nullify,那么只有
p1
将从 l1
、l2
、l3
中的反向关系中删除。
使用“无操作”,l1
、l2
、l3
中的反向关系将保持不变,
因此指向一个不存在的元素p1
。您必须删除 p1
从这些对象中“手动”。
换句话说,“Nullify”是保持对象图一致的最简单规则:如果a
与b
相关,而b
被删除,那么b
与a
无关没有了。
【讨论】:
如果p1
被删除并且没有其他配置文件与 l1
、l2
和 l2
和 l3
相关 - 应该删除这些“寻找”是有道理的。以上是关于核心数据多对多关系的正确删除规则?的主要内容,如果未能解决你的问题,请参考以下文章