2016-07-05 86 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

将其设置为接受的答案! :) –