我们有一个.NET 3.5 WinForms应用程序,它使用Linq2Sql将记录插入SQL Server 2008数据库。它在过去几年中运行良好,直到昨天我们注意到submitchanges()调用导致多次插入记录。查询只运行了五次,而不是每次只插入一次新记录(因为它总是这样做,应该这样做),因此每条记录最后插入5次!!! 这当然是个大问题,我们的数据库中不能有随机出现的重复记录 我们不知道为什么会这样,我怀疑网络问题。有没有人知道可能是什么原因,如何解决它以及如何摆脱它?
编辑:这是代码示例:
if (selectedOrders > 0)
{
try
{
foreach (Customer cust in selectedOrders.Select(a=>a.Customer))
{
Invoice newInvoice = new Invoice();
newInvoice = cust.CustomerID;
// ... other code here
db.Invoices.InsertOnSubmit(newInvoice);
db.SubmitChanges();
}
}
catch (Exception ex)
{
log.Items.Add("Error: " + ex.Message);
log.SelectedIndex = log.Items.Count - 1;
log.Update();
}
}
感谢。
扬
答案 0 :(得分:0)
选择客户后应使用Distinct()
方法,因为所选订单中可能有相同的客户。此外,在将多个记录插入一个表时,最好在db.SubmitChanges()
循环之外使用foreach
。
var customers = selectedOrders.Select(a=>a.Customer).Distinct();
foreach (Customer cust in customers)
{
Invoice newInvoice = new Invoice();
newInvoice = cust.CustomerID;
// ... other code here
db.Invoices.InsertOnSubmit(newInvoice);
}
db.SubmitChanges();