关于Rollback的DbContextTransaction说明

Cal*_*ton 2 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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

usr*_*usr 5

事务提交或回滚.中间没有.

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

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

错误冒泡,导致回滚,最终在可以完成某些操作的地方处理.

你吞下这个例外.非常危险.