Los estados de documentación de hibernación la siguientes:modos de liberación de conexión nhibernate: ¿por qué se recomienda la documentación utilizando "after_transaction"?
El parámetro hibernate.connection.release_mode de configuración se utiliza para especificar qué modo de liberación para su uso. Los valores posibles: * auto (por defecto) - equivalente a after_transaction en la versión actual. Rara vez es una buena idea cambiar este comportamiento predeterminado ya que las fallas debido al valor de esta configuración tienden a indicar errores y/o supuestos no válidos en el código de usuario. * on_close - dice usar ConnectionReleaseMode.OnClose. Esta configuración se deja para compatibilidad con versiones anteriores, pero se desaconseja su uso. ...
He creado una prueba de integración que provoca una excepción StaleObjectException abriendo dos sesiones al mismo tiempo y manipulando la misma entidad. Para garantizar que la prueba revierte todo al finalizar, el contenido de la prueba se coloca dentro de un TransactionScope; esto hace que las transacciones distribuidas se activen porque dos sesiones abrirán una conexión db contra la misma transacción ambiental. Quiero cambiar la configuración predeterminada de ConnectionReleaseMode a "OnClose", pero como se indicó anteriormente, la documentación no lo recomienda. ¿Alguien puede explicar por qué no es una buena idea cambiar el comportamiento predeterminado?
¿Por qué usa un workscope manual en lugar de una forma nhiberna para administrar las transacciones? – Paco
Mi UnitOfWork maneja las transacciones de la manera nhibernate. No puedo provocar una excepción StaleObjectStateException si uso una sola sesión dentro de la prueba (porque entonces no puedo obtener dos instancias de la misma entidad). De todos modos, esto está fuera del punto. – Marius
No puedo responder a su pregunta (todavía), pero me gustaría saber más sobre el tema, porque espero problemas similares en el futuro en el proyecto en el que estoy trabajando. ¿Cómo se crea tu instancia de ISession? – Paco