.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合法吗? 是的,了解原因