简单的场景。
使用LinqToSQL从一个源读取数据并保存到SQL数据库。 文件中有很多行。某些行可能会发生SQL异常,但我们想忽略它(日志异常)并仍保存其余数据。
目前我们在每行输入数据之后提交更改。第一次遇到SQL异常时,无法处理以下任何行,因为似乎重新提交了相同的异常。
处理此问题的最佳方法是什么?
答案 0 :(得分:0)
确定。我似乎找到了一个解决方案并希望分享它。
执行此操作的方法是在继续之前清除所有待处理的更改。因此,如果SubmitChanges失败,我现在在datacontext上调用此扩展方法 - RejectPendingChanges()。
当处理下一行时,它现在更长时间尝试重新提交错误数据。
public static void RejectPendingChanges(this System.Data.Linq.DataContext db){
var chgset = db.GetChangeSet();
if (chgset != null)
{
foreach (object objToInsert in chgset.Inserts)
{
db.GetTable(objToInsert.GetType()).DeleteOnSubmit(objToInsert);
}
//Undo deletes
foreach (object objToDelete in chgset.Deletes)
{
db.GetTable(objToDelete.GetType()).InsertOnSubmit(objToDelete);
}
///this._DB.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, chgset.Deletes);
db.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, chgset.Updates);
}
}