2012-02-09 2 views
2

У нас есть приложение .NET 3.5 WinForms, которое использует Linq2Sql для вставки записей в базу данных SQL Server 2008. В течение последних нескольких лет до этого мы отлично работали, и вчера мы заметили, что вызов 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

+3

«Сетевая проблема»? Вы попали за это? – bzlm

+3

Похоже, что кому-то не хватает уникального ограничения на их базу данных. – jason

ответ

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(); 
Смежные вопросы