在 TransactionScope 实例化之后,我创建了 EF 上下文并保存了一些数据,然后我创建了另一个 EF 上下文并再次保存了数据。在第二个 EF 中,我收到错误“[SERVER] 上的 MSDTC 不可用”。
该问题通过对事务中的所有内容使用一个 EF 上下文来解决。我认为如果我使用相同的连接字符串,就不需要事务升级。
任何人对此都有解释,您有什么疑问?
在 TransactionScope 实例化之后,我创建了 EF 上下文并保存了一些数据,然后我创建了另一个 EF 上下文并再次保存了数据。在第二个 EF 中,我收到错误“[SERVER] 上的 MSDTC 不可用”。
该问题通过对事务中的所有内容使用一个 EF 上下文来解决。我认为如果我使用相同的连接字符串,就不需要事务升级。
任何人对此都有解释,您有什么疑问?
为了防止事务升级,不仅仅是使用相同的连接字符串,还必须使用相同的sql connetcion。
根据MSDN,导致System.Transactions基础设施将事务所有权转移到 MSDTC 的升级发生在以下情况:
事务中至少包含两个支持单阶段通知的持久资源。例如,征用单个连接不会导致事务被提升。但是,每当您打开与数据库的第二个连接导致数据库登记时,System.Transactions 基础结构会检测到它是事务中的第二个持久资源,并将其升级为 MSDTC 事务。
这很可能是您的情况。