2012年12月26日 星期三

New transaction is not allowed because there are other threads running in the session

問題

在使用 Entity Framework 5.0 查詢並新增資料時,發生了這樣的例外

New transaction is not allowed because there are other threads running in the session

原因

經 Google 大神的查訪後,這篇告訴我們,原來當資料筆數多時,原來的connection 尚未 close,程式卻可能執行到新的 SaveChange 了,而引發新的 transaction。

例如

var payments = from i in _context.Payments
               select i;
foreach (var payment in payments)
{
    ...
    _context.SaveChanges();
}

解法

只要簡單的強迫 ToList(),將資料先查詢出來即可

var payments = (from i in _context.Payments
               select i).ToList();
foreach (var payment in payments)
{
    ...
    _context.SaveChanges();
}

沒有留言:

Share with Facebook