尝试使用内部循环中的savechanges()进行保存时出现事务错误

时间:2016-03-25 07:44:55

标签: c# entity-framework

当我尝试从每个循环中调用实体框架SaveChanges()时,我遇到了问题。例外情况说“当一个新事务已存在于另一个线程中时”。从Linq查询获取lst。所以我想在完成内循环时保存数据。感谢。

foreach (keyword kwd in lst)
{        
    foreach (DataRow row in dt.Rows)
    {
       //processing
    } 
    //i need saving here.               
    db.SaveChanges();
}
//not here.

1 个答案:

答案 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();
}