【发布时间】:2013-01-29 00:02:08
【问题描述】:
我正在使用 C# .NET 3.5 中的 LINQ-To-SQL 更新数据库,但我使用的数据并不总是很好。插入的数据和数据库中很有可能会出现重复。
目前,我正在使用它,其中 dataSetOne、dataSetTwo 和 dataSetThree 是要更新的模型列表:
AppDataContext db = new AppDataContext();
db.DatasetOne.InsertAllOnSubmit(dataSetOne);
db.DatasetTwo.InsertAllOnSubmit(dataSetTwo);
db.DatasetThree.InsertAllOnSubmit(dataSetThree);
try
{
db.SubmitChanges(ConflictMode.ContinueOnConflict);
}
catch (Exception e)
{
CsvToImsConverter.Log.Error(e.Message);
foreach (ObjectChangeConflict occ in db.ChangeConflicts)
{
MetaTable metatable = db.Mapping.GetTable(occ.Object.GetType());
Console.WriteLine("Error in Table: {0}", metatable.TableName);
}
}
这很好用。我遇到的问题是,如果有任何重复,则程序不会更新,从而引发主键违规。我想插入没有违反主键的值,并更新那些没有。
我可以在数据库中搜索重复项,但由于数据库中可能有数千条记录,而我试图插入数百条记录,这可能会非常昂贵。有什么方法可以捕获主键违规错误,更新此记录并继续?由于不会有很多重复,这将是一个更好的解决方案。使用 LINQ-To-SQL 不是强制性的。
使用foreach 循环并使用catch 语句插入列表中的每个对象会更好吗?
提前致谢。
【问题讨论】:
-
在插入处移动 try catch ....
-
插入工作正常,因为它们没有更新数据库。引发异常的是 SubmitChanges。
-
您是否尝试过检查现有情况以了解您实际获得了多少性能影响?考虑过早的优化万恶之源等等......像这样stackoverflow.com/questions/100068/…
-
这就是我要做的,但我想我会检查是否有更好的方法。可能只有 2-3 个具有重复项的对象,并且在 db 中解析数千个这样一个小数字似乎效率很低。
标签: c# .net sql linq-to-sql