我正试图将一个项目转换为.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();
}
型
1条答案
按热度按时间7vux5j2d1#
根据文档:
ODP.NET Core不支持分布式事务。
这就是为什么“此平台不支持操作”。
如果每个连接都使用相同的连接字符串,则不会出现问题。只有当您有两个不同的连接时才会出现这种情况。
如果你只使用一个连接,那么你会很好,因为你没有使用分布式事务。一旦你有一个以上的,将涉及Distributed Transaction(ODP.NET Core不支持)。这与你所看到的一致。