【发布时间】:2021-08-20 22:09:16
【问题描述】:
我有一个大约 21000 行的 excel 文件。我将它导入到我的数据库中的临时表中。
现在我想对我的数据进行一些转换,然后将它们放入我的主表中。
当我在 foreach 内执行 SaveChanges() 时,出现以下错误:
Microsoft.Data.SqlClient.SqlException: 'New transaction is not allowed because there are other threads running in the session
当我在foreach 之后使用它时,没有发生错误,并且表只插入了 4 条记录,而不是我预期的全部 21000 条记录。
public ActionResult FeedTempdataToMainDB()
{
var L = new Leave();
// var leaves = new List<Leave>();
foreach (var item in db.TempLeaves)
{
L.Pcode = Int32.Parse(item.Cod);
var z = int.Parse(item.LT) - 1;
if (z == 0) L.LT = Leave.LeaveType.Saati;
else L.LT = Leave.LeaveType.Roozane;
var o = int.Parse(item.DLT) - 1;
if (o == 0) L.DLT = Leave.DLType.Estehghaghi;
if (o == 1) L.DLT = Leave.DLType.Estelaji;
else L.DLT = Leave.DLType.Bihoghoogh;
L.LeaveDayStart = item.LeaveDayStart.Old6digToMiladi();
L.LeaveDayEnd = item.LeaveDayEnd.Old6digToMiladi();
L.LeaveTimeStart = StringToHour(item.LeaveTimeStart);
L.LeaveTimeEnd = StringToHour(item.LeaveTimeEnd);
L.LeaveDays = int.Parse(item.LeaveDays);
L.LeaveMinuts = SaatiLengh(item.LeaveMinuts);
L.RegDate = StringToHour(item.RegTime);
L.RegDate = item.RegDate.Old6digToMiladi().Date;
L.RegistrarCode = Int32.Parse(item.RegistrarCode);
L.HijriYear = L.LeaveDayStart.GetHijriYear();
var t = IsOk(item.RegTime);
if (L.DLT == 0 && t == false || L.LT == 0)
{
L.Calculate = false;
L.IsActive = false;
}
else { L.Calculate = true; L.IsActive = true; }
db.Leaves.Add(L);
db.SaveChangesAsync();
}
//db.SaveChanges();
return RedirectToAction("index");
【问题讨论】:
-
你的数据库没有行,因为你做了一个“新的 DatabaseContext”。那么如何保存空的东西呢?
-
那么为什么它会存储一些记录呢?
标签: c# asp.net asp.net-mvc entity-framework model-view-controller