在一对多关系中,是不是有删除规则在删除其最后一个成员时删除所有者?
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的话,不是大陆有责任自行删除吗?国家不应该决定这一点。 从概念上讲你是对的,但这不是已经存在的删除规则。以上是关于在一对多关系中,是不是有删除规则在删除其最后一个成员时删除所有者?的主要内容,如果未能解决你的问题,请参考以下文章