1
  1. 是否有无论如何找到一个DbContext是否在连接字符串中enlist = false的任何事务中登记? 我正在追踪DbContext.Database.CurrentTransaction,但我注意到它始终为空。为什么DbContext.Database.CurrentTransaction始终为空?

  2. 我知道当enlist = false时,所有打开的连接都不会在环境事务中登记,是吗?

  3. 如果(2)正确,如何在使用TransactionScope的事务中登记DbContext?
  4. 最后,我注意到使用DependentTransaction的克隆与多的DbContext多线程,同时争取= false将不会促进交易分布一个,但我不知道的情况下,一个是我仍然能够提交和回滚enlist = false时使用依赖事务发生异常?
  5. 如果(4)不正确,则是有任何方式充分避免DistributedTransaction同时能够打开多个连接单个事务范围

仅供参考,目前使用Oracle数据库;不过,未来MySQL也将开始运作。

谢谢

回答

0

我真的不能说些什么,1,2和3。但是:

  • 分布,事情也不是绝对清晰。但是,MS会将LTM(Lightweigt Transaction Manger)中的交易升级为DTC(如果出现某种标准)。例如,如果您试图在一个事务中访问不同的数据库。

  • 从LTM升级到DTC或升级将会被迫升级的决定是系统决定。直到现在我没有找到一种方法来改变这种行为。这就是为什么你需要考虑一般的交易。如果有可能避免多个数据库的访问,您可能会重新考虑您的交易。

  • 如需进一步信息I'll建议Why is my TransactionScope trying to use MSDTC when used in an EF Code First app?MSSQL Error 'The underlying provider failed on Open'How do I use TransactionScope in C#?