在 Core Data 中替换多对多关系中的实体

Posted

技术标签:

【中文标题】在 Core Data 中替换多对多关系中的实体【英文标题】:Replace entities in to-many relationship in Core Data 【发布时间】:2011-08-05 23:14:18 【问题描述】:

当我从一对多关系的一侧检索实体时,我会从集合中创建一个可变数组,该数组是关系中实体的集合。我操纵、编辑或以其他方式更改这些实体,可能删除现有实体或添加新实体。 完成更改后,我只需使用数组创建一个新集合,然后用我创建的集合替换原始集合:

self.myOneSideEntity.theManySideEntitiesRelationship = [NSSet setWithArray:myNewArrayOfEntities];

我突然想到,替换集合可能不会删除旧成员。他们发生了什么?这是编辑相关对象集合的正确方法吗?我是否会留下任何孤儿或使用这种技术违背最佳实践?

我的关系是用逆建立的,一侧级联删除,多侧无效,逆关系不是可选的。

【问题讨论】:

【参考方案1】:

我花了几天时间来了解我的应用程序中的类似行为。

关系的“删除规则”仅在包含关系的对象本身被删除时才有效。如果您只是将一组对象替换为另一组对象(就像您所做的那样) - 什么也不会发生。旧集合中的子对象将简单地将反向关系设置为 nil。因此,如果该关系(从子端)不是可选的,则在保存上下文时会出现 CoreData 错误。

目前我没有找到任何方法来管理这个,除了手动删除旧对象。

【讨论】:

【参考方案2】:

对我来说,问题在于获取与当前对象关联的对象。 (groupObject.docs) 当我添加获取此数据的上下文时,它已解决。 我正在使用 MagicalRecord:

[GroupObject MR_findAllInContext:[NSManagedObjectContext MR_defaultContext]]

而不是

[GroupObject MR_findAll]

【讨论】:

以上是关于在 Core Data 中替换多对多关系中的实体的主要内容,如果未能解决你的问题,请参考以下文章

EF Core 过滤掉多对多关系中的重复实体

使用 Swift 和 Core Data 的多对多附加数据

Core Data 多对多谓词(再次)

对于我的多对多关系,Core Data 获取速度非常慢?

EF Core 5.0 - 更新 ASP.NET Core Web API 中的多对多实体

如何有效地迭代 NSSet (Objective-C) - Core Data 中的多对多关系表示?