29 votes

Supprimer les objets enfants dans Entity Framework

J'utilise EF et quand je fais ça :

            foreach (var reg in detail.Regs)
            {
                this.db.Regs.DeleteObject(reg);
            }

Je comprends :

Collection was modified; enumeration operation may not execute.

Qu'est-ce que je fais de mal ici ? ??

80voto

Morteza Manavi Points 20486

La raison en est qu'au fur et à mesure que vous supprimez les objets du contexte, EF met activement à jour le fichier Regs le nombre de propriétés de navigation, ce qui signifie que le détail.règlements est en train d'être modifié pendant le foreach qui provoque toujours l'exception que vous obtenez.

Vous pouvez créer un nouvel objet de collection et continuer à en supprimer comme ceci :

foreach (var reg in detail.Regs.ToList())
{
    this.db.Regs.DeleteObject(reg);
}

Ou encore, vous pouvez le rendre plus propre en utilisant LINQ ForEach méthode :

detail.Regs.ToList().ForEach(r => db.Regs.DeleteObject(r));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X