簡體   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