Один вызов Linq2Sql submitchanges () выполняется несколько раз - PullRequest
2 голосов
/ 09 февраля 2012

у нас есть приложение .NET 3.5 WinForms, которое использует Linq2Sql для вставки записей в базу данных SQL Server 2008. Он работал хорошо в течение последних нескольких лет, пока вчера мы не заметили, что вызов submitchanges () приводит к множественному добавлению записей. Вместо того, чтобы вставлять каждую новую запись только один раз (как это всегда и должно быть), запрос выполнялся в общей сложности пять раз, поэтому каждая запись вставлялась 5 раз !!!
Это, конечно, огромная проблема, мы не можем иметь дубликаты записей в нашей базе данных, которые появляются случайным образом.
Мы понятия не имеем, почему это произошло, я подозреваю, что некоторые проблемы с сетью. У кого-нибудь есть подсказка, в чем может быть причина, как ее устранить и как от нее избавиться?

edit: вот пример кода:

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 Ответ

0 голосов
/ 12 февраля 2012

Вы должны использовать метод 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(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...