2012-02-09 72 views
2

我們有一個使用Linq2Sql將記錄插入SQL Server 2008數據庫的.NET 3.5 WinForms應用程序。它在過去的幾年裏運行良好,直到昨天我們注意到submitchanges()調用導致多次插入記錄。而不是每次插入新記錄一次(因爲它總是這樣做,應該這樣做),查詢總共運行五次,因此每條記錄最終插入5次!
這當然是一個巨大的問題,我們的數據庫中不能有重複的記錄隨機出現。
我們不知道爲什麼會發生這種情況,我懷疑一些網絡問題。有沒有人有線索可能是什麼原因,如何排除故障和如何擺脫它?一個Linq2Sql submitchanges()調用多次執行

編輯:這裏是一個代碼示例:

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(); 
    } 
} 

感謝。
Jan

+1

發表一些代碼。 – cadrell0 2012-02-09 13:41:19

+3

「網絡問題」?你是否爲那個而墮落? – bzlm 2012-02-09 13:41:21

+3

像某人的聲音在其數據庫中缺少唯一約束。 – jason 2012-02-09 13:45:02

回答

0

選擇客戶後應該使用Distinct()方法,因爲在選定的訂單中可能會有相同的客戶。另外,在將多個記錄插入一張表格時,最好在foreach循環之外使用db.SubmitChanges()

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