Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Problema do NHibernate TransactionScope com Oracle 11g


O problema de usar apenas o escopo da transação é descrito aqui:NHibernate FlushMode Auto não liberando antes de encontrar

Parece que o nhibernate (v3.1 com dialeto oracle e 11g db w/opd.net v2.112.1.2) requer suas próprias transações para evitar o problema de liberação, mas não consegui fazer o escopo da transação funcionar com o nhibernate transações.

Não consigo fazê-lo funcionar :(isso pode ser um defeito no nhibernate ou odp.net, não tenho certeza ...

encontrei o mesmo problema aqui:NHibernate 3.0:TransactionScope and Auto -Lavagem

CORRIGIDO:encontrou uma solução! colocando "enlist=dynamic;" na minha string de conexão oracle, o problema foi resolvido. Consegui usar a transação nhibernate (para corrigir o problema de liberação) e o escopo da transação assim:
        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();
        }

Eu verifiquei meus arquivos de log e encontrei isto:2011-06-27 14:03:59,852 [10] DEBUG NHibernate.Impl.AbstractSessionImpl - inscrito na transação DTC:Serializable

antes de qualquer SQL ser executado na conexão. Vou testar a unidade para confirmar a execução adequada. Não tenho muita certeza do que serializável está me dizendo