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
前もって感謝します。