11

我正在使用 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){}
    }
}

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

4

1 回答 1

8

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

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

于 2009-10-28T11:23:07.103 回答