关于Rollback的DbContextTransaction说明

时间:2014-11-25 15:23:36

标签: c# entity-framework

此代码:

using(var context = this.contextFactory.Create()) // creates a context
using(var transaction = context.Database.BeginTransaction()) // starts a transaction
{
    try
    {
        await context.SaveChangesAsync(); // Save my changes

        transaction.Commit(); // Commit my changes
    }
    catch(Exception)
    {
        transaction.RollBack(); // Rollback my changes
    }
}

我是否正确地说如果transaction.Commit()抛出错误,那么transaction将被回滚?

不仅仅是在创建和实体或向DbSet<>添加实体的场景中。我认为我是对的,但只是想确定。

1 个答案:

答案 0 :(得分:5)

交易提交或回滚。中间没有。

如果Commit抛出,则取决于您可以从中得出的具体错误。网络和超时错误不允许您判断事务是否已在商店中提交。

您不需要显式回滚。正如我所说,中间没有。如果事务没有提交,则肯定会回滚。我不知道为什么网上有这么多人决定明确回滚。可能你刚刚看到错误的示例代码。标准模式是在出错时不执行任何操作。

错误冒泡,导致回滚,并最终在可以对其进行处理的地方进行处理。

你正吞下这个例外。非常危险。