仅使用Linq2SQL插入唯一行

时间:2010-12-07 14:57:28

标签: .net linq-to-sql

我不想在数据库中插入重复的行,因此我检查该行是否已存在:

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 个答案:

答案 0 :(得分: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();