【发布时间】:2017-03-27 17:07:29
【问题描述】:
我有这个简单的代码:
foreach(var myvar in _sdb.Vars)
{
myvar.Area= AreaCheck(myvar);
_sdb.Entry(myvar).State = System.Data.Entity.EntityState.Modified;
_sdb.SaveChanges();
}
当我运行这段代码时,我得到了这个异常:
不允许新事务,因为还有其他线程 在会话中运行。
我用谷歌搜索了这个问题,其中一个答案告诉我要更改这一行:
foreach(var myvar in _sdb.Vars)
到这一行:
foreach(var myvar in _sdb.Vars.ToList())
但是当我这样做时,代码根本不起作用。我怎样才能使这项工作?谢谢。
【问题讨论】:
-
var myvar in _sdb.Vars将抛出错误,因为sdb.Vars是IQueryable并且您正在尝试修改它的状态。foreach(var myvar in _sdb.Vars.ToList())应该可以工作,但取决于您在AreaCheck(myvar)方法中所做的事情。请同时添加该代码。此外,将_sdb.SaveChanges();移到foreach循环之外以避免多次数据库命中 -
“但是当我这样做时,代码根本不起作用” - 怎么不起作用?
标签: c# entity-framework linq