我在两个实体之间有一个核心数据关系,如下所示:
Entity A Entity B
aRelationship <-------------->> bRelationship
将删除规则设置为级联。
也许我有这个错误,但我认为如果这两个关系的删除规则都设置为“Cascade”,那么以后是什么时候......
[context deleteObject:EntityA];
...它还会删除与之关联的所有实体B.但是,当我记录我的所有实体B时,我似乎错了。
有人可以对我的困惑有所了解吗?
非常感谢你。
答案 0 :(得分:90)
虽然在图形数据模型编辑器中没有立即显示每个对象关系,即每个
<-->
...实际上是两个独立的关系,每个关系都有自己的删除规则。删除具有删除规则的实体的对象时,将激活删除规则。
因此,如果在数据模型编辑器中,您有两个实体Alpha
和Beta
具有关系:
Alpha.betas<-->>Beta.alpha
...那么你真的有两种关系:
Alpha.betas--(delete rule)-->>Beta.alpha
Beta.alpha--(delete rule)-->Alpha.betas
从不 想要设置这样的删除规则:
Alpha.betas--(cascade)-->>Beta.alpha
Beta.alpha--(cascade)-->Alpha.betas
...因为删除任何一个Beta
实例将删除将触发删除所有相关Alpha
对象的关联Beta
对象。根据数据模型的详细信息,互惠级联可以偶然删除大部分数据。
你真正想要的是:
Alpha.betas--(cascade)-->>Beta.alpha
Beta.alpha--(nullify)-->Alpha.betas
现在,当您删除Alpha
对象时,它将删除所有关联的Beta
对象。
当级联被阻止时,通常是需要关系的问题。没有数据模型的细节,无法确定。
答案 1 :(得分:3)
这取决于您使用的删除规则。
以下是Apple在其文档中所说的内容:
“当您删除托管对象时,重要的是要考虑它 关系,特别是为其指定的删除规则 关系。如果所有托管对象的关系都删除规则 是Nullify,然后对于该对象至少没有额外的工作 做(你可能要考虑其他对象) 关系的目的地 - 如果反向关系是 强制性或基数的下限,然后是目的地 对象或对象可能处于无效状态)。如果有关系 删除规则是Cascade,然后删除一个对象可能会导致 删除其他人。如果规则是拒绝,那么在删除之前 对象必须从中删除目标对象 关系,否则在保存时会出现验证错误。 如果删除规则为“无操作”,则必须确保删除 无需任何步骤来确保对象的完整性 图“。