Я могу успешно воспроизвести это, попробовав открыть 2 соединения в одном TransactionScope
(даже первое из них закрывается перед открытием следующего), например:
var connectionString = "some connection";
using (var t = new TransactionScope())
{
using (var con1 = new OracleConnection(connectionString))
{
con1.Open();
}
using (var con2 = new OracleConnection(connectionString))
{
con2.Open();//exception thrown at here
}
}
На самом деле я пытаюсь воспользоваться TransactionScope
для реализации своего рода Ambient transaction
для моих репозиториев (каждый из которых открывает свое собственное соединение, используя одну и ту же строку соединения). Приведенный выше код максимально упрощен, чтобы помочь воспроизвести исключение.
Я не уверен, что делаю что-то не так или TransactionScope
не поддерживается OracleManagedDataAccess
, по крайней мере, в .NET Standard
.
Мой проект нацелен на .NET Standard 2.0 (lib) и .NET Core (приложение) 2.2, OracleManagedDataAccess
устанавливается через nuget (конечно, нацеленный на .NET Standard) и имеет версию 2.19.3
.
Вот трассировка стеков вышедшего выше исключения:
в OracleInternal.MTS.MTSRMManager.CCPEnlistDistributedTxnToSysTxn (OracleConnectionImpl connImpl, транзакция txn, MTSTxnRM txnRM, MTSTxnBranch txnBranch)
в OracleInternal.MTS.MTSRMManager.CCPEnlistTransaction (OracleConnectionImpl connImpl, транзакция транзакции, MTSTxnRM txnRM, MTSTxnBranch txnBranch)
в OracleInternal.ConnectionPool.PoolManager`3.GetEnlisted (ConnectionString csWithDiffOrNewPwd, логическое значение bGetForApp, OracleConnection connRefForCriteria)
в OracleInternal.ConnectionPool.OracleConnectionDispenser`3.Get (ConnectionString cs, PM conPM, ConnectionString pmCS, SecureString securedPassword, SecureString securedProxyPassword, OracleConnection connRefForCriteria)
в Oracle.ManagedDataAccess.Client.OracleConnection.Open ()
У меня такое ощущение, что это очень сложная проблема, зависящая почти от OracleManagedDataAccess
. Если я не могу использовать TransactionScope
, не будет простого способа реализовать Ambient transaction
.