【问题标题】:EntityException unhandledEntityException 未处理
【发布时间】:2016-07-05 13:25:30
【问题描述】:

我的代码中有一条错误提示

在提供程序连接上启动事务时出错。有关详细信息,请参阅内部异常

内部异常是:

不允许新事务,因为会话中还有其他线程在运行。

我的代码:

        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# 的新手。

【问题讨论】:

标签: c# entity-framework


【解决方案1】:

替换

 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() 方法的情况下循环查询结果时会发生此错误。该方法关闭连接,避免了这个问题。

【讨论】:

  • 很高兴听到这个消息! :)
  • @JCM 如果它解决了您的问题,请选择此作为接受的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
  • 2017-11-16
  • 1970-01-01
相关资源
最近更新 更多