sql >> Base de Datos >  >> RDS >> Oracle

Problema de NHibernate TransactionScope con Oracle 11g

El problema de usar solo el alcance de la transacción se describe aquí:NHibernate FlushMode Auto no descarga antes de buscar

Parece que nhibernate (v3.1 con dialecto de Oracle y 11g db w/opd.net v2.112.1.2) requiere sus propias transacciones para evitar el problema de descarga, pero no he podido hacer que el alcance de la transacción funcione con nhibernate transacciones.

Parece que no puedo hacer que funcione :(esto podría ser un defecto en nhibernate o odp.net, no estoy seguro...

encontré el mismo problema aquí:NHibernate 3.0:TransactionScope y Auto -Sonrojarse

CORREGIDO:¡encontré una solución! poniendo "enlist=dynamic;" en mi cadena de conexión de Oracle, el problema se resolvió. Pude usar tanto la transacción nhibernate (para solucionar el problema de descarga) como el alcance de la transacción de la siguiente manera:

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

Revisé mis archivos de registro y encontré esto:2011-06-27 14:03:59,852 [10] DEBUG NHibernate.Impl.AbstractSessionImpl - inscrito en la transacción DTC:Serializable

antes de que se ejecutara cualquier SQL en la conexión. Realizaré pruebas unitarias para confirmar la ejecución adecuada. Aunque no estoy muy seguro de lo que me dice serializable