如何从Entity Framework 4的父集合中删除子实体?

cascading-deletes entity-framework

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

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

当我尝试保存更改时,我收到以下错误:

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

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

一般承认的答案

这取决于您是否在DB中有级联。如果你这样做(并且,考虑到你的问题,你可能应该这样做),那么这应该是自动的。 你可以在这里阅读这个


热门答案

我遇到的解决这个问题的方法是对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/



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因