删除核心数据3实体关系

时间:2015-08-20 08:09:45

标签: objective-c core-data cascade

我与我的核心数据模型中的3个实体有关系,下一个关系为A<<> B<< ----> C.

当A对象被删除时,如果A<<> B关系中不再有A,则必须删除B,如果B<<<< - > C关系。

我尝试使用以下命令配置关系:

第一个选项:

  • A到B的关系是“to one”,删除规则是“Cascade”
  • B to A关系是“to many”,删除规则是“Nullify”
  • B to C关系是“to one”,删除规则是“Cascade”
  • C to B关系是“to many”,删除规则是“Nullify” 在这种情况下,当我删除A实体B和C总是被删除,无论有更多的实体。

第二个选项:

  • A到B的关系是“to one”,删除规则是“Cascade”
  • B to A关系是“to many”,删除规则是“Deny”
  • B to C关系是“to one”,删除规则是“Cascade”
  • C to B关系是“to many”,删除规则是“Deny” 在这种情况下,有一个例外,没有任何行动。

第三种选择:

我尝试在B:

中使用prepareForDeletion和这个示例代码
- (void) prepareForDeletion {
    [super prepareForDeletion];

    EntityC *entityC = self.entityC;
    if (entityC && (entityC.isDeleted == NO)) {
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isDeleted == NO"];
        NSSet *setOfBs = [entityC.Bs filteredSetUsingPredicate:predicate];

        if ([setOfBs count] == 0) {
            [self.managedObjectContext deleteObject:entityC];
        }
    }

在最后一种情况下,我有一个随机的结果。有时它按预期工作,有时我只删除一个实体。

有没有简单的方法可以解决这个问题。我更喜欢使用像第一个或第二个的解决方案,但我认为只有使用第三个解决方案才有可能。

0 个答案:

没有答案