core-data - 多对多结构中的删除

标签 core-data many-to-many cascade data-integrity

我只是想很快检查一下。假设我在数据模型中有两个实体:目录和产品。它们彼此之间具有多对多关系,并且两者都是必需的(目录必须至少具有一个产品,并且所有产品都必须至少属于一个目录)。因此,如果我要删除一个产品,那么它的删除应该为Nullify。

但是对于目录,删除策略应该是什么?如果删除目录,则并非其所有产品都必须排他性地属于它。一个产品可能属于多个目录。因此,我绝对不应该使用Cascade。但是,Nullify是否足够?如果我最终悬挂了不属于目录的产品怎么办? Core Data内置了哪些功能可以解决多对多模式的问题?我需要修改架构吗?

最佳答案

Nullify就足够了,多对多听起来不错。但是,核心数据不能直接强制执行您想要的特定约束(删除孤儿),因此您需要自己进行一些清理。

具体来说,在您的实体类中实现willSave,并进行每个实体测试:是否删除?并且,我没有相关的(产品/目录)吗?如果是这样,请删除自己。 (未删除的测试对于避免willSave的无限循环很重要。)

这会将孤立目录或产品的删除推迟到节省时间为止。这可能不是问题。

关于core-data - 多对多结构中的删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5049164/

相关文章:

ios - 当核心数据中的子关系实体发生变化时通知父实体

ios - 核心数据 : How do you migrate an unversioned store?

ios - swift NSSet 和核心数据

java - 我是否可以使用多对多关系在另一个实体上拥有实体集合?

php - 多字段级联mysql

mysql - 使用 CakePHP 或 MySQL FK 处理级联?

swift - 按日期排序 - Swift 3

many-to-many - 如何让 EF 4.1 RC 代码优先使用正确的外键?

entity-framework - 如何在 Entity Framework (.Net 4.0) 中使用导航属性作为主键?

MySQL on delete cascade 不起作用...我正在使用 mac os x lion 和 sequel pro