事务Rollback()有没有机会抛出异常?

时间:2017-10-05 12:59:04

标签: c# entity-framework asp.net-core transactions entity-framework-core

与使用EF Core管理交易相关的问题:

Username, Password, MachineID abc, abc, 123 jkl, jkl, 789 rst, rst, 456是否有机会返回异常,以便将它放在try块中是否有意义?

IDbContextTransaction.Rollback()

PD:在这种特定情况下,无法将交易嵌入 try { //... if(condition) transaction.Commit(); else throw methodReturn.Exception; } catch (Exception e) { try // Does this try make any sense? { transaction.Rollback(); } catch { // Log } throw e; } 语句中,因此在实际代码中需要进行手动using调用。

1 个答案:

答案 0 :(得分:0)

大多数情况下,直到:

  1. 死锁检测
  2. 无互联网连接
  3. 逻辑上和物理上一致的连接
  4. 关机,电源故障,意外终止
  5. 要解决这些问题,您可以:

    1. 使用Xact_Abort设置。当SET XACT_ABORT为ON时,如果Transact-SQL语句引发运行时错误,则终止并回滚整个事务。 当SET XACT_ABORT为OFF时,在某些情况下,仅回滚引发错误的Transact-SQL语句并继续处理事务。根据错误的严重程度,即使SET XACT_ABORT为OFF,也可以回滚整个事务。 OFF是默认设置。

    2. 捕获并处理错误,并在错误处理中指定回滚