我只是想很快检查一下。假设我在数据模型中有两个实体:目录和产品。它们彼此之间具有多对多关系,并且两者都是必需的(目录必须至少具有一个产品,并且所有产品都必须至少属于一个目录)。因此,如果我要删除一个产品,那么它的删除应该为Nullify。
但是对于目录,删除策略应该是什么?如果删除目录,则并非其所有产品都必须排他性地属于它。一个产品可能属于多个目录。因此,我绝对不应该使用Cascade。但是,Nullify是否足够?如果我最终悬挂了不属于目录的产品怎么办? Core Data内置了哪些功能可以解决多对多模式的问题?我需要修改架构吗?
最佳答案
Nullify就足够了,多对多听起来不错。但是,核心数据不能直接强制执行您想要的特定约束(删除孤儿),因此您需要自己进行一些清理。
具体来说,在您的实体类中实现willSave
,并进行每个实体测试:是否删除?并且,我没有相关的(产品/目录)吗?如果是这样,请删除自己。 (未删除的测试对于避免willSave
的无限循环很重要。)
这会将孤立目录或产品的删除推迟到节省时间为止。这可能不是问题。
关于core-data - 多对多结构中的删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5049164/