使用Linq To SQL进行多次SubmitChanges和事务回滚

时间:2009-10-28 11:20:50

标签: .net linq-to-sql transactionscope

我正在使用TransactionScope将Linq中的数据提交给SQL。我的问题是,如果我在同一范围内使用多个SubmitChanges,是否会在出现错误时回滚所有范围,或者只是在最后一次SubmitChanges之后进行更改?例如:

using (TransactionScope trans = new TransactionScope())
{
    using (dbDataContext db = new dbDataContext())
    {
        try
        {
            //do some insert
            db.SubmitChanges();

            //do some updates
            db.SubmitChanges();

            trans.Complete();
        }
        catch(Exception ex){}
    }
}

如果更新SubmitChanges会抛出异常,插入SubmitChanges也会回滚吗?

1 个答案:

答案 0 :(得分:8)

所有更改都将回滚,而不仅仅是上一次SubmitChanges()中的更改。

当您拥有依赖于其他数据的数据时,通常需要使用此模式 - 例如,如果您需要创建一个对象并获取其自动生成的ID以便执行其他操作(尽管L2SQL支持使用其他数据)只需创建对象,在大多数场景中调用SubmitChanges,但我离题了......)。