Linq 修改后收到错误消息“不允许新建事务”,因为会话中正在运行其他线程



我想使用 linq 修改 SQL 数据,但是当我修改时,我遇到了麻烦。

我收到此错误:

不允许新事务,因为会话中正在运行其他线程。

这是我在 C# 中的 linq

for (int i = 1; i < st.Count(); i++)
{
    string Lesson = i.ToString();
    var query = db.YearCourse_105008
                  .Where(o => o.Day == Day && o.Lesson == Lesson)
                  .Select(o => new
                    {
                        O_GUID = o.OpenCourseGUID,
                        Lesson = o.Lesson
                    });
    foreach (var item in query)
    {
        var PK = db.YearCourse_105008.Find(item.O_GUID);
        PK.Day = Day;
        PK.RC_MAJORCODE = st[i];
        PK.Lesson = i.ToString();
        db.Entry(PK).State = EntityState.Modified;
        db.SaveChanges();
    }                   
}

由于query是可以返回对象的IQueryable,当然你需要使用IEnumerable集合来实现它(例如 List ) 使用 foreach 循环迭代查询结果时:

foreach (var item in query.ToList()) // --> here the source should be IEnumerable collection
{
    var PK = db.YearCourse_105008.Find(item.O_GUID);
    PK.Day = Day;
    PK.RC_MAJORCODE = st[i];
    PK.Lesson = i.ToString();
    db.Entry(PK).State = EntityState.Modified;
    db.SaveChanges();
} 

或者先将查询结果从IQueryable转换为IEnumerable

var query = db.YearCourse_105008
                  .Where(o => o.Day == Day && o.Lesson == Lesson)
                  .Select(o => new
                    {
                        O_GUID = o.OpenCourseGUID,
                        Lesson = o.Lesson
                    }).ToList();

注意:此外,db.SaveChanges()方法可以放置在循环之外foreach以一次更新所有修改的条目,因此您无需每次迭代都保存每个修改的条目。

相关问题:

不允许新事务,因为会话中正在运行其他线程 LINQ To 实体

来自实体框架的 SqlException - 不允许新事务,因为会话中正在运行其他线程

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

相关内容

最新更新