Estoy teniendo un gran problema tratando de resolver mis problemas de gestión de sesión en NHibernate. Estoy asumiendo que muchos de mis problemas se deben a la falta de conocimiento de los conceptos de IoC y AOP; al menos eso es en lo que estoy pensando cuando Fabio Maulo sigue dirigiéndome.Gestión de sesión de NHibernate y carga lenta
De todos modos, mi problema es que tengo una aplicación de formularios de ganar que está haciendo llamadas "get" y vincula el resultado a una grilla. Después de la vinculación, el usuario puede realizar algún tipo de acción de "escritura" y eso da como resultado que la sesión se cierre después de la escritura en un intento de utilizar la sesión por concepto de uso. Luego, el usuario puede desplazarse por la cuadrícula, lo que hace que comience la carga diferida y ahora la sesión se ha cerrado y recibo una excepción.
No quiero dejar mi opinión al tanto de mis sesiones, no quiero enviar un KillAllSessions cuando el usuario cierra el formulario. Además, un usuario puede tener múltiples formularios abiertos en cualquier momento dado que agravan aún más los problemas asociados con ese método. En esencia, quiero que todo esto funcione "detrás de escena".
Así que mi idea hasta ahora es interceptar la llamada de carga lenta y verificar si la sesión está abierta y si no la vuelvo a abrir, obtenga la información y luego vuelva a cerrarla. Sin embargo, por lo que puedo decir, que no es mucho, esto es esencialmente cómo funciona la carga diferida de todos modos. Es interceptado por la fábrica de proxy (NHibernate.Bytecode.Castle) y luego recupera los datos usando la sesión. Así que tengo que interceptar esa llamada y pasarla a la interceptación original prevista después de reabrir la sesión. Esa es mi idea.
Mi pregunta es, ante todo, ¿es esta la forma correcta de hacerlo? Segundo, si es así, ni siquiera sé por dónde empezar. Nunca he interceptado llamadas a métodos, lo sabía en teoría, pero no en la práctica. Sé que hay bibliotecas que hacen este tipo de cosas, como Rhino Commons, pero quiero aprovechar esta oportunidad para aprender y convertirme en un mejor programador. Intento entender el AOP y los Objetos del Contexto Vinculado, pero actualmente no lo estoy asimilando. ¿Podrían algunos de ustedes amigos ayudar a un chico?
Suena como algo muy extraño de hacer. La sesión debe ser eliminada después de cerrar. ¿Puede dar un ejemplo? – Paco
Lo siento, ¿qué parte parece extraña? En cuanto a un ejemplo, no conozco otra cosa que no sea darle la secuencia de eventos que me hizo enfrentar este problema: 1. Abra la sesión 2. Obtenga datos en forma de un IList 3. Complete una suscripción a TYyped colección 4. Vincular a la cuadrícula de datos 5. Se realiza un cambio arbitrario 6. Este cambio solicita una sesión 7. El administrador de sesiones le entrega la sesión ya abierta 8. Como es una función de escritura, cierra la sesión cuando finaliza 9. El usuario comienza a desplazarse por la grilla ocasionando que se produzca una carga diferida 10. Se produce una excepción porque la sesión ya no está abierta – joshlrogers
¿Por qué se produce una carga diferida durante el desplazamiento? – Paco