如何将datacontext回滚到最后一次提交更改的点

时间:2009-05-15 08:06:00

标签: c# linq linq-to-sql datacontext

我正在开发一个插入很多新对象(行)和它们之间关系的应用程序。但是在发生错误的某个时刻,我希望对DataContext的所有更改都被拒绝并“丢弃”。因此,在出错之后,我有一个与数据库状态匹配的DataContext的干净副本。

2 个答案:

答案 0 :(得分:1)

修改

或者,您可以使用DataContext.Transaction,并将其用于.Commit().Rollback()您的更改。

ORIG

扔掉那个DataContext&重新实例化。

像...一样的东西。

public void MyMethod(string connStr)
{
    try
    {
        DataClasses1DataContext dc = new DataClasses1DataContext(connStr);
        for (int i = 0; i < 100; i++)
        {
            try
            {
                //Do Stuff
                //Insert Objects
                dc.SubmitChanges();
            }
            catch (Exception ex) //So if it bombs in the loop, log your exception
            {
                Log(ex);
            }
            finally //Reinstantiate your DC
            {
                dc = new DataClasses1DataContext(connStr);
            }
        }
    }
    catch (Exception bigEx)
    {
        Log(bigEx);
    }
}

答案 1 :(得分:1)

您还可以在using语句中使用TransactionScope。如果您没有在TransactionScope上调用.Complete(),则所有更改在处理时都会回滚(在离开using语句时会发生这种更改)。