使用 TransactionScopeAsyncFlowOption 时事务升级
Transaction escalates when using TransactionScopeAsyncFlowOption
我有一个使用 async/await 用 C# 编写的小型 Web api 服务器。网络版本为4.5.2
一切正常,除了我使用 TransactionScope 进行某些调用并且底层事务升级为分布式事务。由于我对数据库调用使用 async/await,因此我使用 TransactionScopeAsyncFlowOption。 SQL 服务器是 运行 版本 2008 r2,因此它应该能够在不升级事务的情况下处理多个调用。所有调用都使用相同的连接字符串对同一个数据库进行。
所有 SQL 连接都是在 using 语句中完成的,我没有嵌套它们中的任何一个。每次对数据库的调用都会在另一个调用完成之前等待,因此在一个事务中不应该同时激活两个连接,除非我误解了 async/await 的工作原理。如果这可能会影响事情,我正在使用 Dapper。
我是否遗漏了一些明显的东西,或者我是否需要重写我的代码以对事务中的所有操作使用相同的连接?
感觉真傻,错过了Pooling was disabled in the connection string。已删除 Pooling=false
,事务不会升级到分布式状态。
我有一个使用 async/await 用 C# 编写的小型 Web api 服务器。网络版本为4.5.2
一切正常,除了我使用 TransactionScope 进行某些调用并且底层事务升级为分布式事务。由于我对数据库调用使用 async/await,因此我使用 TransactionScopeAsyncFlowOption。 SQL 服务器是 运行 版本 2008 r2,因此它应该能够在不升级事务的情况下处理多个调用。所有调用都使用相同的连接字符串对同一个数据库进行。
所有 SQL 连接都是在 using 语句中完成的,我没有嵌套它们中的任何一个。每次对数据库的调用都会在另一个调用完成之前等待,因此在一个事务中不应该同时激活两个连接,除非我误解了 async/await 的工作原理。如果这可能会影响事情,我正在使用 Dapper。
我是否遗漏了一些明显的东西,或者我是否需要重写我的代码以对事务中的所有操作使用相同的连接?
感觉真傻,错过了Pooling was disabled in the connection string。已删除 Pooling=false
,事务不会升级到分布式状态。