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

本文关键字:失败 操作 一个 如果 | 更新日期: 2023-09-27 17:56:44

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

例如,我

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

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

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

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

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

您可以使用 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();
    }
} 

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