问题描述
根据微软文档:
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被释放时,事务管理器会提交事务。
如果事务管理器由于连接丢失而无法提交事务,则所有打开的事务都应由数据库本身回滚。