Asp.net TransactionScope异步流选项。在TransactionScope中启用,但未按预期工作

Asp.net TransactionScope异步流选项。在TransactionScope中启用,但未按预期工作,asp.net,asp.net-web-api,transactionscope,Asp.net,Asp.net Web Api,Transactionscope,我有一个在ASP.NET web API上启用事务的场景。在这种情况下,我的web API使用多个DBContext(因为我们处理的是多个数据库)。为此,我创建了一个新的操作过滤器 准确地说,在web API项目中,我在“OnActionExecuteGasSync”方法中启动一个事务作用域,然后在“OnActionExecuteAsync”操作过滤器方法中完成事务作用域 我观察到的是,当我启用TransactionScopeAsyncFlowOption.Enabled(根据异步场景的要求)时

我有一个在ASP.NET web API上启用事务的场景。在这种情况下,我的web API使用多个DBContext(因为我们处理的是多个数据库)。为此,我创建了一个新的操作过滤器

准确地说,在web API项目中,我在“OnActionExecuteGasSync”方法中启动一个事务作用域,然后在“OnActionExecuteAsync”操作过滤器方法中完成事务作用域

我观察到的是,当我启用TransactionScopeAsyncFlowOption.Enabled(根据异步场景的要求)时,Transaction.Current在“OnActionExecutedAsync”方法中以某种方式变为null。然而,在TransactionScopeAsyncFlowOption.Suppress的情况下,它将保持不变,web API中的所有数据库操作都按预期包装在事务中,但当调用dispose of时,我得到一个异常,即必须在同一线程上处理事务作用域(这是正确的,根据我的理解,启用TransactionScopeAsyncFlowOption.Enabled的全部目的就是为了适应这种情况)

有人能解释为什么TransactionScopeAsyncFlowOption.Enabled会以这种方式运行,或者我在这种方法中做了一些错误的事情吗?

检查下面的文章

这个呢

正如我们在using块外部看到的,事务。Current属性为null。在using块内部,事务。Current属性不为null。即使调用堆栈中的方法(如调用堆栈中的SomeMethodInCallStack)也可以访问Transaction.Current,只要它包装在using块中