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