Comment supprimer une entité enfant d'une collection parent avec Entity Framework 4?

cascading-deletes entity-framework

Question

J'utilise Entity Framework 4 et entretiens une relation un-à-plusieurs entre une entité parent et une entité enfant. J'essaie de supprimer un enfant à l'aide du référentiel parent en le supprimant de la collection enfants du parent:

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

Lorsque j'essaie de sauvegarder les modifications, le message d'erreur suivant s'affiche:

Une relation de l'AssociationSet 'ParentChild' est à l'état 'Supprimé'. Compte tenu des contraintes de multiplicité, un "enfant" correspondant doit également être dans l'état "supprimé".

Bien sûr, je n'ai pas à supprimer l'entité enfant explicitement à l'aide d'un référentiel enfant!

Réponse acceptée

Cela dépend si vous avez une cascade dans la base de données. Si vous le faites (et, compte tenu de votre question, vous devriez probablement le faire), cela devrait alors être automatique. Vous pouvez lire à ce sujet ici .


Réponse populaire

Ce que j'ai rencontré pour résoudre ce problème est le remplacement suivant sur le 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();
}

Jetez un oeil ici: http://blog.oneunicorn.com/2012/06/02/deleting-orphans-with-entity-framework/



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow