我不想在数据库中插入重复的行,因此我检查该行是否已存在:
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提交的对象。这意味着该表仍包含重复的行。如何只插入一次对象?
答案 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();