2012-02-23 8 views
22

Actualmente estoy usando EF 4.0. Mi objetivo es eliminar una colección secundaria y agregar nuevas al mismo padre.Se modificó Entity Framework Collection; la operación de enumeración no se puede ejecutar

public void AddKids(int parentId, Kids newKids) 
{ 
    using (ModelContainer context = new ModelContainer(connectionString)) 
    { 
     using (TransactionScope scope = new TransactionScope()) 
     { 
      var query = from Parent _parent in context.Parents 
         where _parent.ParentId == parentId select _parent; 

      Parent parent = query.Single(); 
      while (parent.Kids.Any()) 
      { 
       context.Kids.DeleteObject(parent.Kids.First()); 
      } 

      if (newKids != null) 
      { 
       foreach (Kid _kid in newKids) 
       { 
        parent.Kids.Add(new Kid 
        { 
         Age = _kid.Age, 
         Height = _kid.Height 
        }); 
       } 
      } 
      scope.Complete(); 
     } 
     context.SaveChanges(); //Error happens here 
    } 
} 

El error es a partir del título: Se modificó la colección; la operación de enumeración no se puede ejecutar.

Cualquier ayuda sería apreciada.

+1

¿Dónde defines newKids? –

+0

@JustinNiessner: Gracias, he editado mi pregunta. – madatanic

+1

Ahora también me pregunto dónde se define el padre. –

Respuesta

42

Está viendo esto porque elimina objetos de una colección que actualmente tiene operaciones activas. Más específicamente está actualizando la colección Kids y luego ejecutando el operador Any() sobre ella en el ciclo while. Esta no es una operación admitida cuando se trabaja con instancias de IEnumerable. Lo que puedo aconsejarle que haga es reescribir su tiempo como este:

parent.Kids.ToList().ForEach(r => context.Kids.DeleteObject(r)); 

Espero que eso ayude.

+1

He intentado su método también con el mismo error. Después de un par de horas de excavación, resultó que los códigos publicados funcionan bien. Descubrí mi problema con la modificación de la colección "Niños" más adelante en el proceso. Gracias por ayudar. – madatanic

+1

Estoy feliz de haber ayudado. Buena suerte con tu proyecto. – ScorpiAS

+0

¡Perfecto! Esto me ayudó, muchas gracias. –

Cuestiones relacionadas