我的代码中出现错误
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/