2012-02-23 14 views
22

Aktualnie używam EF 4.0. Moim celem jest usunięcie kolekcji podrzędnej i dodanie nowych do tego samego rodzica.Kolekcja Entity Framework została zmodyfikowana; operacja wyliczania może nie być wykonywana

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 
    } 
} 

Błąd jest taki sam jak w tytule: Kolekcja została zmodyfikowana; operacja wyliczania może nie zostać wykonana.

Każda pomoc zostanie doceniona.

+1

Gdzie definiujesz newKids? –

+0

@JustinNiessner: Dziękuję, zredagowałem moje pytanie. – madatanic

+1

Teraz zastanawiam się również, gdzie zdefiniowano rodzica. –

Odpowiedz

42

Widzisz to, ponieważ usuwasz obiekty z kolekcji, która ma obecnie aktywne operacje. Dokładniej, aktualizujesz kolekcję Kids, a następnie uruchamiasz na niej Any() w pętli while. Ta operacja nie jest obsługiwana podczas pracy z instancjami IEnumerable. To, co mogę ci doradzić, to przepisać na chwilę:

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

Mam nadzieję, że to pomoże.

+1

Próbowałem również Twojej metody z tym samym błędem. Po kilkugodzinnym wykopywaniu okazało się, że działające kody działają bez zarzutu. Odkryłem problem z późniejszą modyfikacją kolekcji "Dzieci". Dziękuję za pomoc. – madatanic

+1

Cieszę się, że pomogłem. Powodzenia w projekcie. – ScorpiAS

+0

Idealny! To mi pomogło - wielkie dzięki. –

Powiązane problemy