繁体   English   中英

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

[英]Oracle.ManagedDataAccess.Core - Transaction Scope Issue

我正在尝试将项目转换为 .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();
    }

根据文档

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

这就是为什么“此平台不支持操作”的原因。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM