Сбой области транзакции с BeginTransaction в Oracle: соединение уже является частью локальной или распределенной транзакции

Такое странное поведение при использовании OracleConnection с TransactionScope. Если я пытаюсь использовать connection.BeginTransaction () в области транзакции, я получаю простое элегантное исключение InvalidOperationException: соединение уже является частью локальной или распределенной транзакции.

вот некоторый код:

var trxOptions = new TransactionOptions();
 trxOptions.IsolationLevel = IsolationLevel.ReadCommitted;
 using (var transaction = new TransactionScope(TransactionScopeOption.Required,trxOptions))
            {

                var c = ConfigurationManager.ConnectionStrings["oracle_test"].ConnectionString;
                using (var oracle = new OracleConnection(c))
                {
                    oracle.Open();
                    using (var tr = oracle.BeginTransaction(System.Data.IsolationLevel.ReadCommitted))
                    {
                        var cmd = oracle.CreateCommand();
                        cmd.CommandText = "INSERT INTO simple_user VALUES('a')";

                        cmd.ExecuteNonQuery();
                        tr.Commit();
                    }
                }


        // now go to sql server and insert data
       transaction.Complete();

}

Если я не используйте BeginTransaction все работает. Есть идеи, как заставить его работать?

PS: У меня нет такой проблемы на Sql Server.

Edit

Спасибо за ответы, я полагаю, мне нужно внести некоторые изменения, чтобы прояснить мой вопрос.

Прежде всего, приведенный выше код демонстрирует проблему. Допустим, у меня есть две библиотеки DLL MyProject.Oracle.dll и MyProject2.MsSql.dll, и я хочу использовать методы внутри этих dll, и они используют db.BeginTransaction (). Если бы эти DLL использовали TransactionScope, моя внешняя транзакция не была бы проблемой. Распределенная транзакция будет обработана без каких-либо проблем. Но я не могу изменить код внутри dll.

И почему db.BeginTransaction () работает для SqlServer, но не для Oracle?

6
задан adt 29 July 2011 в 10:01
поделиться