一个Linq2Sql submitchanges()调用执行多次

时间:2012-02-09 13:39:19

标签: .net winforms linq-to-sql

我们有一个.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();  
    }
}

感谢。

1 个答案:

答案 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();