我创建了一个隐式事务,如下所示:
Using ts As New TransactionScope(TransactionScopeOption.Required, New TimeSpan(1, 0, 0, 0))
MethodA()
ts.Complete()
End Using
MethodA()
反过来调用了一些在环境事务中成功登记的方法,我可以看到它:
然而,一个方法(从上面TransactionScope
创建的调用堆栈深度为4),我们似乎无法访问环境事务:
我相信这将在交易中的堆栈中的任何位置都可用,并且可能是此方法中的代码无法访问此事务中的数据的原因。
为什么环境交易不可用的任何想法?
答案 0 :(得分:1)
如果未声明Transaction
,则听起来该文件只缺少将其引入范围的using
指令。尝试设置手表
System.Transactions.Trasaction.Current.TransactionTraceId.TransactionIdentifier
相反,因为它可以使用或不使用using
指令。
如果环境交易不可用,那么Transaction
仍然可以,但Transaction.Current
将是null
。这种情况的常见原因是切换线程的任何事情,例如async
代码。了解执行上下文中的流程是很棘手的。