c# - 未处理的 EntityException

标签 c# entity-framework

我的代码中出现错误

An error occurred while starting a transaction on the provider connection. See inner exception for details

内部异常是:

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

我的代码:

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

最佳答案

替换

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

关于c# - 未处理的 EntityException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38204678/

相关文章:

c# - 如何从库中访问连接字符串

c# - Entity Framework : Updating a field to a null value?

entity-framework - 如何防止 Entity Framework 中的 ID 更改漏洞

c# - xml处理过程中的异常

c# - 连接到安全网络服务时出错!

c# - 跨TCP客户端的双向通讯

c# - 为什么我不能拥有 protected 接口(interface)成员?

c# - Entity Framework 在子类上是唯一的

entity-framework - Entity Framework 发布揭秘

c# - .netTiers + Codesmith VS Entity Framework .Net C#