当我尝试从每个循环中调用实体框架SaveChanges()
时,我遇到了问题。例外情况说“当一个新事务已存在于另一个线程中时”。从Linq查询获取lst。所以我想在完成内循环时保存数据。感谢。
foreach (keyword kwd in lst)
{
foreach (DataRow row in dt.Rows)
{
//processing
}
//i need saving here.
db.SaveChanges();
}
//not here.
答案 0 :(得分:3)
此行foreach (keyword kwd in lst)
会导致您的错误。 IQueryable
使用延迟执行,因此只有在迭代结果时才会执行查询。在您的情况下,在foreach
循环中。但是在获取数据时,您已经开始修改数据并将其保存到数据库中 - >交易错误。解决方案是通过调用ToList
:
foreach (keyword kwd in lst.ToList())
{
foreach (DataRow row in dt.Rows)
{
//processing
}
//i need saving here.
db.SaveChanges();
}