我正在尝试将项目转换为.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();
}
答案 0 :(得分:1)
根据the docs:
ODP.NET Core不支持分布式事务。
因此,“此平台不支持该操作。”
如果对每个连接使用相同的连接字符串,则不会 问题。仅当您有两个不同的连接时发生。
如果仅使用单个连接,则可以使用,因为您没有使用分布式事务。但是,一旦有多个,就会涉及到Distributed Transaction(ODP.NET Core不支持)。这与您所看到的一致。