2

如果一组操作中的一个操作失败,我在这里没有找到关于如何回滚 sql server 上的先前操作的具体帖子。

例如,我有一个查询来带来一些数据,我添加了一行context.saveChanges(),然后可能执行了第二次和第三次插入。

好的,最后一次插入失败,所以我想将 db 状态恢复到三个插入之前的状态。

我正在使用 EF4 和 SQL Server 2008 R2 + Asp Net MVC 4 / C#。

交易是唯一的方法吗?由于这些操作已被一一(以编程方式)保存,而不仅仅是一个context.saveChange(),我不确定如何执行回滚。

4

2 回答 2

4

您可以使用 TransactionScope 执行这样的“嵌套事务”。

包装你的逻辑

using (var transScope = new TransactionScope())
{

    //add something
    context.SaveChanges();

    //do something else
    context.SaveChanges();

    if (foo == bar) //check that it worked fine
    {
        transScope.Commit();
    }
} 
于 2013-01-31T12:21:06.860 回答
0

好吧,什么也不做。SaveChanges 已经在内部使用了一个事务。它是原子的——要么保存更改,要么不保存。

于 2013-01-31T12:06:33.340 回答