2010-12-07 8 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(); 
関連する問題