2012-02-09 37 views
2

Linq2Sqlを使用してSQL Server 2008データベースにレコードを挿入する.NET 3.5 WinFormsアプリケーションがあります。昨日、submitchanges()呼び出しがレコードの複数の挿入につながっていることに気付くまで、これまでの数年間はうまくいきました。新しいレコードを1回だけ挿入するのではなく、クエリが5回実行されたので、各レコードは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(); 
    } 
} 

ありがとう:ここでのサンプルコードです。
1月

+1

いくつかのコードを投稿してください。 – cadrell0

+3

「ネットワークの問題」?あなたはそれのために落ちましたか? – bzlm

+3

誰かのような音はデータベースに一意の制約がありません。 – jason

答えて

0

選択した注文に同じ顧客が存在する可能性があるため、Distinct()メソッドを使用する必要があります。また、1つのテーブルに複数のレコードを挿入する場合は、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(); 
関連する問題