开发者

How do I delete a child entity from a parent collection with Entity Framework 4?

I'm using Entity Framework 4 and have a one-to-many relationship between a parent and child entity. I'm trying to delete a child using the parent repository by removing it from the parent's children collection:

public virtual void RemoveChild(Child child)
        {
            children.Remove(chil开发者_JAVA百科d);
        }

When I try to save the changes I get the following error:

A relationship from the 'ParentChild' AssociationSet is in the 'Deleted' state. Given multiplicity constraints, a corresponding 'Child' must also in the 'Deleted' state.

Surely I don't have to delete the child entity explicitly using a child repository!


What I've come across to solve this problem is the follwoing override on the 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();
}

Take a look here: http://blog.oneunicorn.com/2012/06/02/deleting-orphans-with-entity-framework/


It depends on whether you have a cascade in the DB. If you do (and, given your question, you probably should), then this should be automatic. You can read about this here.


In EF4, if the child objects and the parent object are all attached to the ObjectContext, then EF will keep the Foreign Key references and Object References in-sync in both the Parent and the affected Children.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜