不允许新事务,因为有其他线程在会话中运行.实体框架

本文关键字:会话 线程 运行 框架 实体 其他 新事务 事务 因为 不允许 | 更新日期: 2023-09-27 18:17:41

我有这个简单的代码:

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())

但是当我这样做的时候,代码根本不起作用。我该怎么做呢?谢谢。

不允许新事务,因为有其他线程在会话中运行.实体框架

像下面这样在迭代后保存

using (var _sdb = new MyContext())
{
    foreach (var myvar in _sdb.Vars)
    {
        // Change myvar
    }
     //save at the end
    _sdb.SaveChanges();
}