Вставлять только уникальные строки, используя Linq2SQL - PullRequest
0 голосов
/ 07 декабря 2010

Я не хочу вставлять повторяющиеся строки в базу данных, поэтому я проверяю, существует ли уже строка:

foreach (var key in someCollection)
{
    var myObject = dataContext.MyObjects.FirstOrDefault(my => my.SomeKey == key);
    if (myObject == null)
    {
        myObject = new MyObject()
        {
            SomeKey = key,
            ...
        };
        dataContext.InsertOnSubmit(myObject);
    }
}
dataContext.SubmitChanges();

Однако запрос не находит объекты, которые уже были добавлены с помощью InsertOnSubmit,которые еще не отправлены с использованием SubmitChanges.Это означает, что таблица все еще содержит повторяющиеся строки.Как мне вставить каждый объект только один раз?

1 Ответ

1 голос
/ 08 декабря 2010

Вы, вероятно, можете что-то сделать с набором изменений, если не хотите менять свой код.Вы должны проверить: http://msdn.microsoft.com/en-us/library/system.data.linq.changeset.inserts.aspx

dataContext.GetChangeSet().Inserts

Но я думаю, что было бы лучше атаковать проблему немного по-другому.Может быть, что-то вроде этого:

Dictionary<object,MyObject> objectsToInsert = new Dictionary<object, MyObject>();
foreach (object key in someCollection)
{
    var myObject = dataContext.MyObjects.FirstOrDefault(my => my.SomeKey == key);
    if ((myObject == null) && (objectsToInsert.ContainsKey(key) == false))
    {
        myObject = new MyObject()
        {
            SomeKey = key,
            ...
        };
        objectsToInsert.Add(key,myObject);
    }
}
dataContext.InsertAllOnSubmit(objectsToInsert.Values);
dataContext.SubmitChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...