Oracle
 sql >> Base de données >  >> RDS >> Oracle

Problème NHibernate TransactionScope avec Oracle 11g

Le problème avec l'utilisation uniquement de la portée de la transaction est décrit ici :NHibernate FlushMode Auto Not Flushing Before Find

Il semble que nhibernate (v3.1 avec dialecte oracle et 11g db w/opd.net v2.112.1.2) nécessite ses propres transactions pour éviter le problème de vidage, mais je n'ai pas réussi à faire fonctionner la portée de la transaction avec le nhibernate opérations.

Je n'arrive pas à le faire fonctionner :(cela pourrait être un défaut dans nhibernate ou odp.net, pas sûr...

trouvé le même problème ici :NHibernate 3.0 :TransactionScope et Auto -Rinçage

CORRIGÉ :trouvé une solution ! en mettant "enlist=dynamic;" dans ma chaîne de connexion oracle, le problème a été résolu. J'ai pu utiliser à la fois la transaction nhibernate (pour résoudre le problème de vidage) et la portée de la transaction comme suit :

        ISessionFactory sessionFactory = CreateSessionFactory();

        using (TransactionScope ts = new TransactionScope())
        {
            using (ISession session = sessionFactory.OpenSession())
            using (ITransaction tx = session.BeginTransaction())
            {
                //do stuff here

                tx.Commit();

            }
            ts.Complete();
        }

J'ai vérifié mes fichiers journaux et j'ai trouvé ceci :2011-06-27 14:03:59,852 [10] DEBUG NHibernate.Impl.AbstractSessionImpl - inscrit dans la transaction DTC :sérialisable

avant l'exécution de tout SQL sur la connexion. Je ferai un test unitaire pour confirmer la bonne exécution. Je ne sais pas trop ce que le sérialisable me dit cependant