如果目标对象在 Coredata 的另一个源中,则不要删除它
Don't delete object of destination if it is in another Source in Coredata
我有一个多对多的关系,其中 entity
是 Employee
和 Department
。一切都很好,但是当我试图学习关系删除规则时,我找不到正确的方法。
如果实体部门得到 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 之外解雇。这也将支持对已删除所有分配的员工进行一般维护检查。
我有一个多对多的关系,其中 entity
是 Employee
和 Department
。一切都很好,但是当我试图学习关系删除规则时,我找不到正确的方法。
如果实体部门得到 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 之外解雇。这也将支持对已删除所有分配的员工进行一般维护检查。