Étendue de la Transaction échoue avec BeginTransaction dans Oracle : la Connexion est déjà partie d'un local ou d'une transaction distribuée

Avoir ce comportement étrange lors de l'utilisation OracleConnection avec TransactionScope.
Si j'essaie d'utiliser la connexion.BeginTransaction() dans une étendue de transaction-je obtenir simple élégant InvalidOperationException : la Connexion est déjà partie d'un local ou d'une transaction distribuée.

voici un code:

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();

}

Si je n'utilise pas BeginTransaction tout fonctionne. Toutes les idées pour le faire fonctionner?

PS: je ne suis pas le fait d'avoir un problème sur le Serveur Sql server.

Modifier

Merci pour les réponses, je suppose que je devrais ajouter un peu modifier pour apporter ma question claire.

Première de toutes, le code que j'ai fourni ci-dessus est la démonstration de problème. Disons que j'ai deux dll MyProject.Oracle.dll et MyProject2.MsSql.dll et je tiens à utiliser des méthodes à l'intérieur de ces dll et ils utilisent db.BeginTransaction(). Si ces dll avaient utilisé TransactionScope ma transaction externe ne sera pas un problème. Répartis transaction doit être traitée sans aucun problème. Mais je ne peux pas changer de code à l'intérieur de dll.

Et pourquoi db.BeginTransaction() fonctionne pour SqlServer, mais pas pour Oracle?

OriginalL'auteur adt | 2011-07-29