2012-02-23 98 views
22

我目前正在使用EF 4.0。我的目標是刪除一個子集合並向同一個父集添加新集合。實體框架集合已被修改;枚舉操作可能不會執行

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? – 2012-02-23 02:02:23

+0

@JustinNiessner:謝謝,我編輯了我的問題。 – madatanic 2012-02-23 02:07:04

+1

現在我也想知道父母的定義。 – 2012-02-23 02:09:58

回答

42

您會看到這是因爲您從當前具有活動操作的集合中刪除對象。更具體地說,您正在更新Kids集合,然後在while循環中對其執行Any()運算符。在使用IEnumerable實例時,這不是受支持的操作。我可以建議你做的是重寫你的,因爲這一點:

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

我希望有所幫助。

+1

我已經嘗試過您的方法以及相同的錯誤。經過幾個小時的挖掘,結果發現代碼工作正常。我在後面的過程中發現了修改「Kids」集合的問題。感謝您的幫助。 – madatanic 2012-02-23 16:55:10

+1

我很高興我幫了忙。祝你的項目好運。 – ScorpiAS 2012-03-01 12:00:57

+0

完美!這幫助了我 - 非常感謝。 – 2014-01-05 09:32:32

相關問題