我正在使用 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
提前致谢。