不允许新事务,因为会话 LINQToEntity 中还有其他线程在运行

知道这个为什么会坏吗?

foreach (var p in pp)
{
ProjectFiles projectFile = (ProjectFiles)p;
projectFile.Status = Constants.ProjectFiles_ERROR;
projectFile.DateLastUpdated = DateTime.Now;
context.SaveChanges();
}

我读到解决这个问题的方法是在 foreach 循环之前一次性检索结果。

但是我没有这样做吗? “ pp”是在我的情况下结果的集合

88178 次浏览

pp变量不是对象的集合,它是一个可以返回对象的枚举器。在使用枚举数时,源必须保持打开状态。

使用 ToList方法将枚举数实现为一个集合。它将从枚举数中读取所有项并关闭到源的连接,以便您可以将该连接用于其他事情。

foreach (var p in pp.ToList())

解决这个问题的一个方法是在迭代集合之前调用 .ToList()

同时,在循环退出后只调用 context.SaveChanges()一次,以加快代码速度。