2010-12-07 4 views
-1

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

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

Возможно, вы можете что-то сделать с набором изменений, если вы не хотите менять свой код. Вы должны проверить: 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(); 
Смежные вопросы