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

时间:2019-07-20 13:12:13

标签: c# oracle core

我正在尝试将项目转换为.Net Core,但遇到了绊脚石。

当我在事务范围内打开两个不同的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();
    }

1 个答案:

答案 0 :(得分:1)

根据the docs

  

ODP.NET Core不支持分布式事务。

因此,“此平台不支持该操作。”

  

如果对每个连接使用相同的连接字符串,则不会   问题。仅当您有两个不同的连接时发生。

如果仅使用单个连接,则可以使用,因为您没有使用分布式事务。但是,一旦有多个,就会涉及到Distributed Transaction(ODP.NET Core不支持)。这与您所看到的一致。