我想使用 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 - 不允许新事务,因为会话中正在运行其他线程
实体框架 -"不允许新事务,因为会话中正在运行其他线程"