2011-05-23 9 views
6

Uso NHibernate de manera intensiva durante algunos meses y lo encuentro muy poderoso, pero para mí este es el tipo de herramienta que a veces puede dañarlo. Tuve muchas situaciones en las que un cambio relativamente simple en el mapeo, en la consulta LINQ o en cualquier código que utilizara mis entidades condujo a comportamientos inesperados. Mi mayor "éxito espectacular" es tener la operación de lectura que N + 1 eliminó e inserta solo porque estaba ordenando mi colección de componentes en código en lugar de en la base de datos.Automatización de perfiles/pruebas unitarias de los comportamientos de NHibernate

Gracias a NHProf que pueden realizar un seguimiento de algunos de los problemas de este tipo, pero siento que no puedo estar seguro de que después de la refactorización o pequeño requisito cambia mi capa de acceso de datos todavía se comporta correctamente y de manera eficiente . Probarlo/perfilarlo manualmente después de cada cambio es de alguna manera doloroso. Lo que esperaré aquí es algún tipo de forma de prueba de unidad comportamiento de NHibernate bajo el capó, es decir, qué SQL se genera, cuántas consultas se realizan, cuántas entidades cargan, cuántas tablas se unieron, etc.

Sé que puede estar un poco fuera del objetivo principal de ORM, pero para aplicaciones que necesitan un buen rendimiento, ese conocimiento de bajo nivel me parece más importante que la abstracción.

¿Hay implementaciones similares a esta idea? ¿Cómo puedo automatizar el perfil mi aplicación NHibernate?

Respuesta

6

Algo que he usado para este propósito es Estadísticas.

, usted puede obtener una instancia IStatistics de su fábrica de sesiones, y obtener una gran cantidad de indicadores de desempeño, incluyendo el número de consultas ejecutadas, fallos de caché, los tiempos de ejecución, y muchos más.

Con esto, puede establecer pruebas de unidad/integración que realicen las llamadas adecuadas y verifique que esos indicadores estén dentro de los parámetros de referencia esperados.

Cuestiones relacionadas