Pergunta

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(child);
        }

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!

Foi útil?

Solução

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.

Outras dicas

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/

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top