Такое странное поведение при использовании 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?