9

我正在使用 Entity Framework 4 并且在父实体和子实体之间具有一对多的关系。我正在尝试通过从父级的子级集合中删除它来删除使用父级存储库的子级:

public virtual void RemoveChild(Child child)
        {
            children.Remove(child);
        }

当我尝试保存更改时,出现以下错误:

来自“ParentChild”AssociationSet 的关系处于“已删除”状态。给定多重约束,相应的“子”也必须处于“已删除”状态。

当然,我不必使用子存储库显式删除子实体!

4

3 回答 3

3

我遇到的解决这个问题的是 DbContext 上的以下覆盖:

public override int SaveChanges()
{
    Set<Child>()
    .Local
    .Where(r => !Parent.Local.SelectMany(s => s.Children).Contains(r))
    .ToList()
    .ForEach(r => Set<Child>().Remove(r));

    return base.SaveChanges();
}

看看这里: http ://blog.oneunicorn.com/2012/06/02/deleting-orphans-with-entity-framework/

于 2012-08-24T11:16:28.530 回答
1

这取决于您在数据库中是否有级联。如果您这样做(并且,鉴于您的问题,您可能应该这样做),那么这应该是自动的。您可以在此处阅读相关内容

于 2010-05-21T16:32:05.057 回答
1

在 EF4 中,如果子对象和父对象都附加到 ObjectContext,则 EF 将在父对象和受影响的子对象中保持外键引用和对象引用同步。

于 2012-06-27T17:59:40.683 回答