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