【发布时间】:2021-08-10 12:43:34
【问题描述】:
根据微软文档:
TransactionScope.Complete 只是将您的状态通知事务管理器的一种方式,事务管理器提交事务的实际工作发生在 using 块中的最后一行代码之后。事务管理器根据是否调用了 TransactionScope.Complete 方法来决定提交或回滚。
那么,如果在提交事务的过程中出现异常(例如 Internet 关闭、数据库连接关闭)会发生什么?会回滚还是抛出 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 方法来决定提交或回滚。”
-
从技术上讲,交易总是可以提交并向客户端发送确认,但客户端无法正确处理此确认。这将导致异常但不会回滚。例如,在使用 SQL Server 时,当服务器处理完
COMMIT TRANSACTION命令时,事务被提交并被认为是成功的,即使连接应该断开。但是,事务是原子的和数据库一致的属性在所有情况下都得到了保留。 -
@Klamsi 我不确定如果在事务管理器决定提交之后抛出异常会发生什么。
-
看起来你可以很容易地测试不?
-
@JeroenMostert 谢谢!这消除了我的大部分疑虑。
标签: c# .net database transactionscope