.NET EntityFramework:“在提供程序連接上啟動事務時發生錯誤。有關詳細信息,請參閱內部異常”

.net entity-framework

在.NET中使用Entity Framework我想循環遍歷從數據庫返回的項目列表並進行更新。

var qry = (from c in DBEntities.Customer select c);
foreach (Object item in qry)
{
  item.FirstName = .... 
  ... etc, other code here
  DBEntities.SaveChanges();
}

根據: http ://social.msdn.microsoft.com/Forums/en/adodotnetentityframework/thread/8a337036-d288-48d4-80d4-89e5a51eddd9?ppud =4 S Hargroves建議轉換為IList,這就是解決方案。

沒試過,我相信它會起作用,但即使它有效,我想知道為什麼我不能在循環期間更新項目?這是在我的本地開發環境中發生的,沒有其他用戶訪問數據庫。

謝謝 ...

熱門答案

使用查詢上的SaveChanges更新數據庫時,查詢無效。您執行的更新可能已更改結果集。

通過使用ToList ,您將觸發查詢的執行並將數據庫中的所有結果帶入內存。您的內存列表現在已經具體,不再關注查詢了。

因為對象查詢使用IEnumerable ,所以不能在foreach中修改列表。

我也相信這段代碼會因為同樣的基本原因而失敗:

List<int> numbers = new List<int>() { 1,2,3,4,5,6};
foreach(var num in numbers)
  numbers.Remove(num); //Invalidates the Enumerator being used in the foreach


許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因