0

我有一個名爲Course_Predecessor數據庫中的表,我試圖刪除使用EF此表中的所有項目,然後向表中添加新的數據。 我不能刪除數據,因爲我收到以下錯誤:「收集被修改的枚舉操作可能不會執行」刪除使用實體框架失敗數據庫中的項目

這是我使用的代碼(在接收數據庫的上下文爲ctx)

List<Course_Predecessor> lst = new List<Course_Predecessor>(); 
fillTheList(ref lst , someData); 

ctx.Course_Predecessor.RemoveRange(ctx.Course_Predecessor.ToList()); 
ctx.Course_Predecessor.AddRange(predecessors); 

我在RemoveRange函數中得到錯誤。

將不勝感激任何幫助。

+0

如果你做'ctx.Course_Predecessor.RemoveRange(ctx.Course_Predecessor.ToList());'沒有任何周圍的代碼會發生什麼?這應該很好。 –

回答

0

試試這個,

ctx.Course_Predecessor.ToList().ForEach(r => ctx.Course_Predecessor.DeleteObject(r)); 
ctx.SaveChanges(); 
+0

我沒有修改元素。 lst是我想插入到表中的新項目的列表(該函數只是將值插入到列表中)然後我想刪除所有表並插入新值 – Adam

+0

@Adam是否按照建議嘗試 – Sajeetharan

+0

我可以'噸試試這個,因爲它不適合我的情況我的朋友我確實需要這些行以插入新值 – Adam

1

您可以嘗試如下:

ctx.Course_Predecessor.ToList().ForEach(c => ctx.Course_Predecessor.Remove(c)); 
+0

它說ForEach沒有定義 – Adam

+0

對不起,我錯過了添加.ToList()。看到我更新的答案。這應該適合你。 – user1990

1

如果您正在使用EF6(這看起來像你),那麼你應該能夠刪除所有記錄該表通過執行以下操作。 (請注意,在RemoveRange呼叫缺席.ToList()方法)

ctx.Course_Predecessor.RemoveRange(ctx.Course_Predecessor); 
ctx.SaveChanges(); 

或者你可以這樣做:

foreach (var predecessor in ctx.Course_Predecessor) 
{ 
    ctx.Entry(predecessor).State = EntryState.Deleted; 
} 
ctx.SaveChanges(); 

的代碼段都做同樣的事情。

+0

它仍然說收集被修改 – Adam

+0

@Adam我不認爲'RemoveRange'調用觸發收集修改的異常。我能夠毫無問題地運行精確的代碼。看起來您可能在修改集合的同時在您使用相同數據上下文的代碼的前一部分中枚舉它。您是否可以更新您的問題以包含「fillTheList」方法的代碼以及在您嘗試從該表中刪除所有記錄然後調用'SaveChanges'之前執行的任何其他代碼? – sam2929