Oracle.ManagedDataAccess.Core -事务范围问题

mctunoxg  于 2023-11-17  发布在  Oracle
关注(0)|答案(1)|浏览(151)

我正试图将一个项目转换为.Net Core,但我遇到了一个绊脚石。
当我在一个transaction scope中打开两个不同的oracle连接时,收到以下错误:

"Operation is not supported on this platform."

"   at OracleInternal.MTS.MTSRMManager.CCPEnlistDistributedTxnToSysTxn(OracleConnectionImpl connImpl, Transaction txn, MTSTxnRM txnRM, MTSTxnBranch txnBranch)

   at OracleInternal.MTS.MTSRMManager.CCPEnlistTransaction(OracleConnectionImpl connImpl, Transaction transaction, MTSTxnRM txnRM, MTSTxnBranch txnBranch)

   at OracleInternal.ConnectionPool.PoolManager`3.GetEnlisted(ConnectionString csWithDiffOrNewPwd, Boolean bGetForApp, OracleConnection connRefForCriteria)

   at OracleInternal.ConnectionPool.OracleConnectionDispenser`3.Get(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureString securedPassword, SecureString securedProxyPassword, OracleConnection connRefForCriteria)

   at Oracle.ManagedDataAccess.Client.OracleConnection.Open()"

字符串
下面的代码在打开第二个连接时导致此错误。此外,这不会在标准框架Oracle.ManagedDataAccess上发生。它只会在Oracle.ManagedDataAccess.Core版本上发生。
我的猜测是,它看起来是连接池的东西,但我可以使用一些帮助。
如果每个连接都使用相同的连接字符串,则不会出现问题。只有当您有两个不同的连接时才会出现这种情况。

using (TransactionScope scope = new TransactionScope())
    {
        using (var conn = new OracleConnection(connectionString1))
        {
              conn.Open();
        }

        using (var conn = new OracleConnection(connectionString2))
        {
             conn.Open(); //Exception occurs here
        }

       scope.Complete();
    }

7vux5j2d

7vux5j2d1#

根据文档:
ODP.NET Core不支持分布式事务。
这就是为什么“此平台不支持操作”。
如果每个连接都使用相同的连接字符串,则不会出现问题。只有当您有两个不同的连接时才会出现这种情况。
如果你只使用一个连接,那么你会很好,因为你没有使用分布式事务。一旦你有一个以上的,将涉及Distributed Transaction(ODP.NET Core不支持)。这与你所看到的一致。

相关问题