多次提交更改和例外

时间:2014-12-09 17:11:18

标签: c# linq-to-sql exception-handling

简单的场景。

使用LinqToSQL从一个源读取数据并保存到SQL数据库。 文件中有很多行。某些行可能会发生SQL异常,但我们想忽略它(日志异常)并仍保存其余数据。

目前我们在每行输入数据之后提交更改。第一次遇到SQL异常时,无法处理以下任何行,因为似乎重新提交了相同的异常。

处理此问题的最佳方法是什么?

1 个答案:

答案 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);
        }
    }