2012-02-23 11 views
22

私は現在EF 4.0を使用しています。私の目的は、子コレクションを削除し、新しいコレクションを同じ親に追加することです。Entity Frameworkコレクションが変更されました。列挙操作が実行されない可能性があります

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

エラーはタイトルと同じです:コレクションが変更されました。列挙操作が実行されないことがあります。

ご協力いただければ幸いです。

+1

newKidsはどこで定義しますか? –

+0

@JustinNiessner:ありがとう、私は私の質問を編集しました。 – madatanic

+1

今私は親がどこに定義されているのだろうか。 –

答えて

42

現在、アクティブな操作を行っているコレクションからオブジェクトを削除するため、これが表示されます。具体的には、Kidsコレクションを更新してから、whileループでAny()演算子を実行します。これは、IEnumerableインスタンスを操作する場合にサポートされる操作ではありません。私がアドバイスできることは、次のように書き直すことです:

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

私は役に立つと思います。

+1

私は同じエラーであなたの方法を試みました。数時間掘り下げた後、投稿されたコードがうまく動作することが判明しました。後で "キッズ"コレクションを変更することで、私の問題を発見しました。助けてくれてありがとう。 – madatanic

+1

私は助けてくれてうれしいです。あなたのプロジェクトに幸運。 – ScorpiAS

+0

完璧!これは私を助けた - ありがとう。 –

関連する問題