在一对多关系中,是不是有删除规则在删除其最后一个成员时删除所有者?

Posted

技术标签:

【中文标题】在一对多关系中,是不是有删除规则在删除其最后一个成员时删除所有者?【英文标题】:In one-to-many relationship, is there a delete rule to delete the owner when its last member is deleted?在一对多关系中,是否有删除规则在删除其最后一个成员时删除所有者? 【发布时间】:2016-01-25 01:18:59 【问题描述】:

我在 Core Data 中有一对多的关系。例如,A->B,其中 A 是部门,B 是员工。一个部门可以有很多员工,一个员工只能有一个部门。

我设置了A->(casacade)->B,所以如果我删除A,所有的B都会被删除。

相反,我也可以删除B。在我删除最后一个B的情况下,是否有删除规则使A自动被删除?或者我必须以编程方式删除 A ?有什么需要注意的吗?

【问题讨论】:

我不是核心数据专家,但我相信您可以将关系限制为每个 A 需要最少数量的 B,但您可以通过验证来检测我们有进入无效状态(因为最后一个 B 已被删除)并采取适当的措施。 developer.apple.com/library/mac/documentation/Cocoa/Conceptual/… Delete a managed object if the associated managed object has no elements的可能重复 【参考方案1】:

在我们的书 https://www.objc.io/books/core-data/ 的示例应用程序中,我们准确地展示了这个用例。

基本上你想要做的是覆盖prepareForDeletion(当你的对象被删除时它会被调用)。在那里您要检查未删除的数组或对象集是否为空:

这里一个国家的prepareForDeletion 检查它的(父)大陆是否还有任何未删除的国家:

public override func prepareForDeletion() 
    guard let c = continent else  return 
    if c.countries.filter( !$0.deleted ).isEmpty 
        managedObjectContext?.deleteObject(c)
    

【讨论】:

国家个数为0的话,不是大陆有责任自行删除吗?国家不应该决定这一点。 从概念上讲你是对的,但这不是已经存在的删除规则

以上是关于在一对多关系中,是不是有删除规则在删除其最后一个成员时删除所有者?的主要内容,如果未能解决你的问题,请参考以下文章

了解一对多的核心数据删除规则

核心数据反向关系未设置

iOS:删除核心数据中具有一对多关系的实体

ACCESS级联删除一对多关系的记录

iphone核心数据:无法删除具有一对多关系的数据

一对多删除对象不删除多个实体上的对象