2016-07-05 82 views
3

我得到在我的代碼中的錯誤,說EntityException未處理

同時啓動提供商連接上一個交易發生錯誤。詳情請參閱

內部異常是內部異常:

新的事物是不允許的,因爲有在會話中運行其他線程。

我的代碼:

 using (var db = new ProductionContext()) 
     { 
      var objct = ((System.Data.Entity.Infrastructure.IObjectContextAdapter)db).ObjectContext; 
      objct.ExecuteStoreCommand("TRUNCATE TABLE [MU By Machine]"); 
      db.SaveChanges(); 

      var query = 
       db.MU_Reports 
       .GroupBy(x => new { x.Date, x.Machine_Number, x.Shift }) 
       .Select(x => new 
       { 
        Date = x.Key.Date, 
        Shift = x.Key.Shift, 
        MachineNum = x.Key.Machine_Number, 
        MU = x.Sum(i => i.MU * 100) 
       }); 

      foreach (var item in query) 
      { 
       var y = new MU_By_Machine(); 

       y.Date = item.Date; 
       y.Shift = item.Shift; 
       y.Machine_Number = item.MachineNum; 
       y.MU = item.MU; 

       db.MU_By_Machines.Add(y); 
       db.SaveChanges(); 
      } 

它發生在我的代碼db.SaveChanges部分,當我將其移出的for循環的代碼工作,但只保存在我的表一行。如果需要更多信息,請告訴我。我對c#仍然陌生。

+0

「請參閱內部異常的詳細信息」 - 「InnerException」說什麼? 'ex.ToString()'是一個方便的方式來顯示關於異常的大量細節。 –

+0

@DStanley它說因爲會話中還有其他線程正在運行,所以不允許新的事務 – JCM

+1

[Entity Framework中的SqlException - 因爲會話中還有其他線程正在運行而不允許新的事務](http:// stackoverflow .com/questions/2113498/sqlexception-from-entity-framework-new-transaction-is-not-allowed-because-ther) – trailmax

回答

2

更換

var query = db.MU_Reports 
       .GroupBy(x => new { x.Date, x.Machine_Number, x.Shift }) 
       .Select(x => new 
       { 
        Date = x.Key.Date, 
        Shift = x.Key.Shift, 
        MachineNum = x.Key.Machine_Number, 
        MU = x.Sum(i => i.MU * 100) 
       }); 

var query = db.MU_Reports 
       .GroupBy(x => new { x.Date, x.Machine_Number, x.Shift }) 
       .Select(x => new 
       { 
        Date = x.Key.Date, 
        Shift = x.Key.Shift, 
        MachineNum = x.Key.Machine_Number, 
        MU = x.Sum(i => i.MU * 100) 
       }).ToList(); 

它幫助我在類似的問題。當您在不使用.ToList()方法的情況下遍歷查詢結果時,會發生此錯誤。此方法關閉連接並避免此問題。

+1

像魅力一樣工作謝謝 – JCM

+0

很高興聽到它! :) –

+2

將其設置爲接受的答案! :) –