如果一个操作失败,则回滚

时间:2013-01-31 12:03:04

标签: c# sql-server asp.net-mvc entity-framework

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

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

好的,这最后一次插入失败,所以我想让db状态达到三次插入之前的状态。

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

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

2 个答案:

答案 0 :(得分: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();
    }
} 

答案 1 :(得分:0)

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