Pregunta

Necesito algunas ideas y pensamientos acerca de una refactorización estoy a punto de hacer a nuestra web-app.

Inicialmente se utilizó el patrón sesión-por-petición con NHibernate y ActiveRecord utilizando el On_BeginRequest / On_EndRequest en el HttpApplication para crear y disponer la sesión. Más tarde, nos dimos cuenta de que cualquier excepción DB-relacionados conseguir lanzado fuera de nuestro contexto monorraíl, lo que significa que nuestros rescates no entran en juego. Como otro efecto secundario, que no tienen la opción de omitir totalmente la creación de sesiones de NHibernate en cualquier acción, que en algunos casos sería deseable.

Así que volvió a escribir para crear sesiones en Initialize () / Contextualizar () en nuestro controlador de base y dispuesto en el Dispose () de nuestro controlador de base. También Rollback la sesión en nuestro controlador de rescate para evitar cualquier cambio medio escrito a la DB. Hasta ahora tan bueno. La razón para hacerlo en el Dispose () se debe a que queremos que viva a través de la vista-prestación, debido a razones perezoso de carga aswell como viewcomponents que necesita para obtener una sesión (que podría cambiar a unidades de trabajo para el viewcomponents, pero no parecen tener un Dispose () ...)

Sin embargo, yo estoy experimentando algunos problemas de punto muerto en el que hemos comenzado transacations en la base de datos que no está recibiendo ni rollback comprometidas y no puedo conseguir mi cabeza alrededor de ella, sobre todo debido a la confusión que hemos hecho con este enfoque ...

Así que encontró este artículo: http: // hackingon.net/post/NHibernate-Session-Per-Request-with-ASPNET-MVC.aspx

Y pensé, "Filtros, podemos utilizar eso en monorraíl también!", Ya que puede poner en el BeforeAction y AfterRendering.

Mis preguntas entonces son:

  1. ¿Qué ocurre si se produce una excepción en el filtro?
  2. Will AfterRendering fuego, incluso si se produce una excepción en la acción o la prestación?
  3. ¿Le recomendarías este enfoque, si no es así, ¿cuáles son sus sugerencias en su lugar?

Cualquier punteros son muy apreciado!

¿Fue útil?

Solución

  1. Hace falta un gestor de errores de aplicaciones para el cuidado de manejo de excepciones.

  2. Adjuntar un depurador y descubrir.

  3. Probablemente no (a pesar de que es mi artículo). No funciona con RenderAction. Mejor que utilizar un contenedor IoC para controlar el tiempo de vida de las conexiones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top