【问题标题】:Cannot access Transaction in method无法访问方法中的事务
【发布时间】:2023-03-03 11:56:01
【问题描述】:

我已经像这样创建了一个隐式事务:

Using ts As New TransactionScope(TransactionScopeOption.Required, New TimeSpan(1, 0, 0, 0))

MethodA()
ts.Complete()

End Using

MethodA() 依次调用了一些成功加入环境事务的方法,我可以看到:

但是一种方法(从上面的TransactionScope 创建到调用堆栈的深度为 4)似乎我们不再可以访问环境事务:

我相信这将在事务中堆栈的任何较低位置可用,这可能是此方法中的代码无法访问此事务中的数据的原因。

任何想法为什么环境事务不可用?

【问题讨论】:

  • 在进入这个方法之前是否已经提交了?
  • 否 - 一旦方法完成,相同的事务将再次可用

标签: c# .net vb.net transactions transactionscope


【解决方案1】:

如果没有声明Transaction,听起来该文件只是缺少将其纳入范围的using 指令。尝试将手表设置为反对

System.Transactions.Trasaction.Current.TransactionTraceId.TransactionIdentifier

相反,不管有没有using 指令,它都可以工作。

如果是环境事务不可用,那么Transaction 仍然可以,但Transaction.Current 将是null。一个常见的原因是任何切换线程的东西,例如async 代码。了解执行上下文中的内容很棘手。

【讨论】:

  • 这总是发生在我身上!我确实尝试过,但没有意识到它是System.Transactions.Tranaction(交易两次)所以它不起作用。看来它毕竟是在正确的交易中登记的。
猜你喜欢
  • 1970-01-01
  • 2020-02-16
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多