如果提交时抛出异常,C# TransactionScope 是否会回滚?

问题描述

根据微软文档:

TransactionScope.Complete 只是通知事务管理器您的状态的一种方式,事务管理器提交事务的实际工作发生在 using 块中的最后一行代码之后。事务管理器根据是否调用了 TransactionScope.Complete 方法来决定提交或回滚。

那么如果在提交事务的过程中发生异常(例如互联网关闭数据库连接关闭)会发生什么?它会回滚还是抛出 TransactionScope 异常?

using (TransactionScope transactionScope = new TransactionScope())
{
    WritetoCloudDatabase(input);
    WritetoCloudDatabase(input);    // I kNow it will rollback if exception thrown in here.
    transactionScope.Complete();
    // Will it rollback if exception thrown in here? (while committing transactions)
}

解决方法

处置 TransactionScope 时。 如果已调用 Complete 方法,事务管理器将提交事务。 如果Complete方法调用后有任何代码抛出异常,因为Complete方法已经被调用过,当transactionScope被释放时,事务管理器会提交事务。

如果事务管理器由于连接丢失而无法提交事务,则所有打开的事务都应由数据库本身回滚。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...