如果目标对象在 Coredata 的另一个源中,则不要删除它

Don't delete object of destination if it is in another Source in Coredata

我有一个多对多的关系,其中 entityEmployeeDepartment。一切都很好,但是当我试图学习关系删除规则时,我找不到正确的方法。

如果实体部门得到 deleted.But 而不是另一个部门的员工,我想删除该部门的所有员工。

Cascade Delete the objects at the destination of the relationship. For example, if you delete a department, fire all the employees in that department at the same time.

但如果他们已经在另一个 department.One 教师教学 Swift 可能在许多部门 "Computer","Electrical","Civil"。我怎样才能实现这一目标。尝试使用级联,但这会删除我设置目的地的所有员工,如下所示:

编辑: 尝试使用 nullify 但删除 Source 会导致删除所有相关的 Destination。然而,删除任何一个 Source 只会导致 Destination 忘记那个特定的 Source.I 猜测,我需要一些中间的无效和级联?

在我的情况下,我不应该将删除关系设置为 Cascade.But,而是将两个删除规则设置为 nullify.And 检查

class Departments: NSManagedObject {

// Insert code here to add functionality to your managed object subclass
    override func prepareForDeletion() {
        for teacher in self.teachers!{ 
            if let tempTeach = teacher as? Teachers{  
                if tempTeach.departments?.count == 1{
                    self.managedObjectContext?.deleteObject(tempTeach)  
                }else{
                    print("this teacher is assigned to another department also so dont delete it") 
                }
            }
        }  
    }  
}

以下关系会做你想做的事(我没有能力在这里测试答案,但没有权利只发表评论让你得到建议作为答案)

员工 -> 部门拒绝(无法解雇仍分配给部门的员工)。

Department -> Employee Cascade(当部门被删除时解雇所有你能解雇的员工,即不再有部门)。

但我觉得设置Department -> Employee 为Nullify 更合理,然后单独扫描未分配的员工在delete department code 之外解雇。这也将支持对已删除所有分配的员工进行一般维护检查。