此代码:
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<>
添加实体的场景中。我认为我是对的,但只是想确定。
答案 0 :(得分:5)
交易提交或回滚。中间没有。
如果Commit
抛出,则取决于您可以从中得出的具体错误。网络和超时错误不允许您判断事务是否已在商店中提交。
您不需要显式回滚。正如我所说,中间没有。如果事务没有提交,则肯定会回滚。我不知道为什么网上有这么多人决定明确回滚。可能你刚刚看到错误的示例代码。标准模式是在出错时不执行任何操作。
错误冒泡,导致回滚,并最终在可以对其进行处理的地方进行处理。
你正吞下这个例外。非常危险。