C# 全部插入仅插入最后一条记录?解决并发冲突
不管我怎么努力,我都不能让它工作 这是一个类似的问题,在我的例子中,它只插入最后一个记录集 起初,我认为它是主键,但没有使用C# 全部插入仅插入最后一条记录?解决并发冲突,c#,sql-server,linq,linq-to-sql,C#,Sql Server,Linq,Linq To Sql,不管我怎么努力,我都不能让它工作 这是一个类似的问题,在我的例子中,它只插入最后一个记录集 起初,我认为它是主键,但没有使用DateTime.UtcNow.Ticks更新ID列将其设置为手动设置。但是在更改了SQLServer中的设置后,我能够手动设置主键 我原以为这样可以解决问题,但现在它更新主键,但只在foreach循环中插入最后一条记录 我尝试删除Dbml并重新创建它,但没有任何效果 这是我正在使用的代码 List<Tenant_Bills_TBL> addNewData =
DateTime.UtcNow.Ticks
更新ID
列将其设置为手动设置。但是在更改了SQLServer中的设置后,我能够手动设置主键
我原以为这样可以解决问题,但现在它更新主键,但只在foreach
循环中插入最后一条记录
我尝试删除Dbml
并重新创建它,但没有任何效果
这是我正在使用的代码
List<Tenant_Bills_TBL> addNewData = new List<Tenant_Bills_TBL>();
Tenant_Bills_TBL addBill = new Tenant_Bills_TBL();
var recordsForTenant = Database.GetBillsRecordsForTenant(Database.DataContext, SelectedTenant.Code);
foreach (var item in recordsForTenant)
{
addBill.ID = DateTime.UtcNow.Ticks;
addBill.Tenant_Code = SelectedTenant.Code;
addBill.Year_Data = DateFilter.Year;
addBill.Month_Data = DateFilter.Month;
addBill.Tenant_Bill = item.Tenant_Bill;
addBill.Bill_Amount = item.Bill_Amount;
addBill.Bill_Quantity = item.Bill_Quantity;
addNewData.Add(addBill);
}
Database.DataContext.Tenant_Bills_TBLs.InsertAllOnSubmit(addNewData);
Database.DataContext.SubmitChanges();
List addNewData=newlist();
承租人账单addBill=新承租人账单;
var recordsForTenant=Database.GetBillsRecordsForTenant(Database.DataContext,SelectedTenant.Code);
foreach(RecordsForEnablent中的var项)
{
addBill.ID=DateTime.UtcNow.Ticks;
addBill.Tenant\u Code=所选的Tenant.Code;
addBill.Year_Data=DateFilter.Year;
addBill.Month_Data=DateFilter.Month;
addBill.Tenant\u Bill=item.Tenant\u Bill;
addBill.Bill\u Amount=item.Bill\u Amount;
addBill.Bill\u数量=item.Bill\u数量;
addNewData.Add(addBill);
}
Database.DataContext.Tenant\u Bills\u TBLs.InsertAllOnSubmit(addNewData);
Database.DataContext.SubmitChanges();
这就像列表在添加后覆盖了值,只保留了列表中的最后一个数据集
服务器端是否有需要更改的设置,或者是其他设置?您之所以会出现这种行为,是因为您反复添加了相同的对象。正如评论所说的,您应该在循环中移动新对象的实例化。 更妙的是,您可以将其作为LINQ声明:
var newData = Database
.GetBillsRecordsForTenant(Database.DataContext, SelectedTenant.Code)
.Select(item => new Tenant_Bills_TBL{
ID = DateTime.UtcNow.Ticks;
Tenant_Code = SelectedTenant.Code;
Year_Data = DateFilter.Year;
Month_Data = DateFilter.Month;
Tenant_Bill = item.Tenant_Bill;
Bill_Amount = item.Bill_Amount;
Bill_Quantity = item.Bill_Quantity;
})
.ToList();
Database.DataContext.Tenant_Bills_TBLs.InsertAllOnSubmit(addNewData);
您之所以会出现这种行为,是因为您一次又一次地添加了相同的对象。正如评论所说的,您应该在循环中移动新对象的实例化。 更妙的是,您可以将其作为LINQ声明:
var newData = Database
.GetBillsRecordsForTenant(Database.DataContext, SelectedTenant.Code)
.Select(item => new Tenant_Bills_TBL{
ID = DateTime.UtcNow.Ticks;
Tenant_Code = SelectedTenant.Code;
Year_Data = DateFilter.Year;
Month_Data = DateFilter.Month;
Tenant_Bill = item.Tenant_Bill;
Bill_Amount = item.Bill_Amount;
Bill_Quantity = item.Bill_Quantity;
})
.ToList();
Database.DataContext.Tenant_Bills_TBLs.InsertAllOnSubmit(addNewData);
争吵
Tenant_Bills_TBL addBill = new Tenant_Bills_TBL();
应该在foreach循环中
问题中的代码实例化单个对象,并在每次迭代中重写其属性
另外,不建议将DateTime.UtcNow.Ticks
作为主键。最好使用数据库自动增量内置机制(大多数数据库都有该选项)。正如您自己发现的那样,foreach循环太快了,在每次迭代之间都无法改变刻度,如果您甚至想到多线程插入,您可以清楚地看到,即使在循环中使用Thread.Sleep也不够好。行
Tenant_Bills_TBL addBill = new Tenant_Bills_TBL();
应该在foreach循环中
问题中的代码实例化单个对象,并在每次迭代中重写其属性
另外,不建议将
DateTime.UtcNow.Ticks
作为主键。最好使用数据库自动增量内置机制(大多数数据库都有该选项)。正如您自己所发现的,foreach循环太快,在每次迭代之间都无法改变刻度,如果您甚至想到多线程插入,您可以清楚地看到,即使有Thread.Sleep在循环中也不够好。此行Tenant\u Bills\u TBL addBill=new Tenant\u Bills\u TBL()
应该在foreach
循环中。@ZoharPeled谢谢,这就成功了。如果你想让它成为一个答案,我将紫外线和马克解决。干杯顺便说一句,我需要在foreach
移动到fast并创建相同的主键值时增加日期时间刻度。此行Tenant\u Bills\u TBL addBill=new Tenant\u Bills\u TBL()
应该在foreach
循环中。@ZoharPeled谢谢,这就成功了。如果你想让它成为一个答案,我将紫外线和马克解决。干杯顺便说一句,我需要在foreach
移动到fast并创建相同的主键值时增加日期时间刻度。我真不敢相信有时我会如此愚蠢。再次感谢。忽略简单的错误不会让人愚蠢。有时候我们都会这样。我真不敢相信有时候我会有多傻。再次感谢。忽略简单的错误不会让人愚蠢。我们有时都这样做。