Es unidad de trabajo más eficiente si no me importa para las transacciones, etc?

StackOverflow https://stackoverflow.com/questions/925919

  •  06-09-2019
  •  | 
  •  

Pregunta

Si tengo 10 llamadas bases de datos en mi página web, y ninguno de ellos requiere ninguna transacciones, etc. Ellos simplemente están recibiendo datos desde la base de datos (lee), debería seguir utilizando la unidad de la clase de trabajo?

¿Se debe a la creación de una nueva sesión por llamada base de datos es demasiado caro?

¿Fue útil?

Solución

Con NHibernate, la creación de fábrica de sesiones es muy caro (por lo que usted quiere almacenar la fábrica de sesiones una vez que ha creado, probablemente en el HttpApplication) pero la creación de la sesión es muy barato. En otras palabras, si mantiene su código más limpio, múltiples creaciones de sesión no es necesariamente una mala cosa. Creo que la documentación NH dice mejor:

  

Un ISessionFactory es una   caro-a-crear, threadsafe objeto   destinada a ser compartida por todos   hilos de aplicación. Un ISession es una   barato, objeto no threadsafe   que debe utilizarse una vez, para un solo   procesos de negocio, y luego desechado.

Por lo tanto, utilizando el patrón UoW probablemente no es más eficiente debido a la sobrecarga adicional, pero es una buena práctica y la sobrecarga probablemente no se va a hacer daño. La optimización prematura y todo eso.

Otros consejos

Sí, se debe utilizar una transacción. Desde el blog de Ayende:

"NHibernate asuma que todos los accesos a la base de datos se realiza bajo una transacción, y fuertemente desalentar cualquier uso de la sesión sin una transacción."

Para más detalles, aquí hay un enlace a su entrada de blog:

http://ayende.com/Blog/archive/2008/12/28/nh-prof-alerts-use-of-implicit-transactions-is-discouraged.aspx

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