ios - 删除多对一关系的规则

标签 ios macos core-data

Apple 的文档Relationship Delete Rules简单明了。但它只谈论一对多关系(一对一关系的删除规则很容易推断)。尚不清楚这些规则对多对一 关系意味着什么。因此,让我们在这里澄清一下。

我们使用 Apple 文档中使用的 Employees-Department 示例。尽管这些适用于员工-部门 关系的规则在现实生活中的含义可能很荒谬,但作为程序员,我们在这里仅讨论它们的逻辑含义。

  • 拒绝
    如果关系目标处有对象,则无法删除源对象。

    比如你要删除一个员工,不管他所在的部门是否还有其他员工,你都必须保证先删除该部门,否则无法删除该员工。

  • 无效化
    从目标对象的反向关系中删除源对象。 (见@bshirley的简明解释)

    例如,如果您删除一个员工,则将他从他所在部门的员工关系中移除。这仅在部门的剩余员工数量大于所需的最小数量时才有意义,或者如果您确保在下一次保存操作之前为部门添加新员工。

    [问题:如果是最后一个员工,部门的员工关系会变成空集还是null?]
    (@TechZen 回答:一对多关系总是返回一个集合对象。它永远不会为零。如果关系的另一端没有对象,则集合为空。)

  • 级联 删除关系目标处的对象。

    比如删除一个员工,同时删除他所在的部门,即使该部门还有其他员工。

    (使用注意事项:它通常会导致“整个对象图中的菊花链删除”,如@TechZen 在其示例中所述。)

  • 无 Action
    不对关系目标处的对象执行任何操作。

    例如,如果您删除了一名员工,请让他的部门保持原样,即使它仍然认为它拥有该员工。

多对多关系的删除规则的含义可以从这里推断出来。

最佳答案

这些是所有关系(不是属性)的删除规则。它们适用于对一对多关系。

  • Nullify - 如果您删除一名员工,则反向关系设置为nil,如果它是 1 对 1,那么从字面上看,在这种情况下,部门的员工将减少一个

  • 级联 - 如果您删除一名员工,其所属部门也将被删除。该部门将遵循其所有属性的删除规则,1)如果员工删除规则是级联,则所有员工都将被此操作删除; 2)如果员工删除规则为Nullify,所有员工将被“搁浅”,没有部门

关于ios - 删除多对一关系的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6587304/

相关文章:

javascript - Cordova如何翻转整个屏幕正面到背面的3D效果

objective-c - cocoa 脚本: Intercept any Object-first message calls

objective-c - 使用 Cocoa 的可扩展服务器

iphone - 执行提取请求时崩溃

ios - UIPickerView 不加载行

ios - 如何在中心设置多个UIView

ios - 如何使用带延迟的参数调用void方法?

ios - 如何为 UIBarButton 创建自定义图标?

ruby - 无法在 OS X "El Capitan"上安装 gems

objective-c - 清空核心数据 NSSet(多个关系)