自动datacontext事务管理

时间:2011-02-18 08:15:32

标签: c# .net linq-to-sql

我假设在以下方式使用DataContext时我会得到自动回滚:

更新我实际上两次致电SubmitChanges,但问题仍然适用。

public void UpdateUser(User user)
    {
        using (var context = new UserDataContext())
        {
            //update stuff.
            context.SubmitChanges();

            //update stuff.
            context.SubmitChanges();
        }
    }

当出现问题时,没有回滚。

相反,为了提供回滚,我实现了以下内容:

public void UpdateUser(User user)
    {
        var context = new UserDataContext();
        try
        {
            context.Connection.Open();
            context.Transaction = context.Connection.BeginTransaction();

            //update stuff.
            context.SubmitChanges();
            context.Transaction.Commit();
        }
        catch (Exception e)
        {
            context.Transaction.Rollback();
            throw;
        }
        finally
        {
            context.Dispose();
        }
    }

很多比我想要的管道更多。是否有更好的方法向DataContext指示您想要自动回滚?

1 个答案:

答案 0 :(得分:4)

如果不在外部事务中(例如TransactionScope),SubmitChanges会为您启动事务,并且如果发生异常则应自动回滚。

建议您发布导致问题的实际代码和发生的异常。

如果您正在执行多个SubmitChanges并希望它们是原子的,请换入TransactionScope

using (TransactionScope ts = new TransactionScope())
{
    blah1.SubmitChanges()

    blah2.SubmitChanges();

    ts.Commit();
}