NHibernate no está integrado con el compilador, y qué ?
Bueno, sé que el titulo suena como “eh !?”, pero dejenme explicarlo un poco más en detalle.
NHibernate es una framework que usa Xml nativamente para configurar los mapeos entre objetos y tablas, que está encargado de juntar estos 2 mundos diferentes.
Ahora, qué tiene de malo esto? Mucha gente puede decir que los archivos Xml son malos, por que después de escribir muchas líneas, intentamos compilar nuestro proyecto, y el compilador de nuestro lenguaje host no sabe si el Xml está bien o no, no nos informa con ningún error. Esto es verdad, se debería correr el proyecto y ver que acontece en tiempo de ejecución, y obtener un error en runtime es simplemente molesto.
Pero bien, tenemos otra alternativa a esto? La respuesta es sí. Vayamos a los detalles. NHibernate tiene también un “compilador”, y si todavía no te lo imaginaste, es el método BuildSessionFactory(). No es necesario lanzar toda la aplicación para saber si nuestros mappings están bien o mal. Una manera de saber si todo está bien es crear un metodo de Test como este:

Luego solamente queda compilar nuestro proyecto, y correr este simple y tonto test. Si nuestro código pasa esta prueba, tus mapeos están bien.
Debemos recordar una cosa, se puede mapear no solamente entidades en los Xml, también se pueden mapear Queries (y otras cosas que no son relevantes en este post). El mapear queries en Xml se llama: Named Queries, y en este post hablamos un poco más de sus bondades. Pero el punto principal aquí es, que mapeando las queries sabrás si están bien formadas o no cuando el método BuildSessionFactory() es disparado (se hacen otras cosas aparte de compilar las queries, se discuten en ese post).
Otra cosa que DEBES recordar es usar Xsd para validar los mappings files. Esto es obligatorio si estás usando NHibernate y quieres pasar el tiempo programando en vez de luchando con errores de mapeo (aquí los errores pueden ser inclusive de Xmls mal formados, donde esto es más grave). Pero esto es tema para otro post.
5 Responses to NHibernate no está integrado con el compilador, y qué ?
Leave a Reply Cancel reply
-
Categories
- .NET
- ActiveRecord
- agil
- Alt.Net
- AOP
- Asp.net MVC
- blog
- C#
- codegeneration
- cosas interesantes
- db4o
- db4o-analyzer
- DLR
- enterprise-library
- expresiones regulares
- General
- Hibernate
- IoC
- it
- Java
- LINQ
- Linux
- Lucene
- Mocking
- Mono
- monosms
- MVC
- NAnt
- NHibernate
- NHibernate.Burrow
- NHibernate.Contrib
- NHibernate.Validator
- noticias
- O/R Mapping
- Open Source
- patrones
- personal
- podcast
- programación
- Redes Neuronales
- Refactoring
- regex
- Scrum
- Security
- Shards
- Sin Categoría
- Spring
- SqlServer
- Testing
- tips
- Tool
- tutorial
- Ubuntu
- uNHAddIns
- video
- Virtualización
- Visual Basic.Net
- Visual Studio
- VMWare
- Web
-
Articles
- June 2011
- May 2011
- November 2009
- October 2009
- April 2009
- March 2009
- February 2009
- October 2008
- September 2008
- August 2008
- July 2008
- June 2008
- May 2008
- April 2008
- March 2008
- February 2008
- January 2008
- December 2007
- November 2007
- October 2007
- September 2007
- August 2007
- June 2007
- May 2007
- April 2007
- March 2007
- February 2007
- January 2007
- December 2006
- November 2006
- October 2006
- September 2006
- August 2006
- March 2006
- February 2006
- December 2005
- November 2005
- October 2005
-
Meta





Hola darío, primeramente presentarme y darte la enhorabuena por la web y tantos posts comentados hacerca de temas de informática como son NHibernate. La verdad llevo un año y un mes realizando una aplicación usando este modo de acceder a los datos y la verdad estoy muy contento aunque siempre hay cosas que puedo mejorar en la aplicación. Usé tus tutoriales hará un año para poder conocer el concepto de ORM y la verdad es que correr el riesgo ha valido la pena, te dejo mi nueva web, aún faltan por poner contenidos pero espero que dentro de poco pueda llegar a los posts que has llegado tú y poder compartir experiencias a la hora de la programación así como todas las experiencias vividas.
http://contenidodigital.wordpress.com/
Un saludo
Hola Dario…
Leyendo tu post me puse a pensar que tan dificil sería poder obtener los errores en mapping en tiempo de compilación. Una idea me ronda en la cabeza y no se hasta donde puede ser correcta.
Qué pasa si yo creo una aplicación que tome del proyecto actual el archivo de configuración de NH, y a partir de ahi intente levantar los XML usando el BuildSessionFactory, los errores podría capturarlos y mandarlos al output.
Si esta aplicación la pongo como una opción en el post-build que Visual Studio debe ejecutar tras terminar de compilar, ¿no obtendría los errores de mapping sin necesidad de ejecutar ni mi proyecto ni correr el test?
No estoy diciendo que el test no sea necesario… eso es una garantía más… y no se discute
Todo esto te lo estoy escribiendo sin ni siquiera pensar mucho en si es posible o no… ya me comentas..
Ahora estoy un poco que a FULL TIME, no me queda tiempo ni para respirar… pero en cuanto tenga unos minutos los voy dedicar a esto y ver que sale.. (avisame de los pro y contras que puede tener esto, para no perder tiempo jejeje )
Salu2
Omar
Hola Omar, como estás.
La verdad que es una buena idea, los pros saltan a la vista.
La única contra que le veo es el tiempo que puede tomar en hacer el BuildSessionFactory cuando hay muchos mappings, quizás pueda tardar sus segundos, y si estamos trabajando en la UI (sin tocar nada del modelo) por mucho tiempo puede ser engorroso cada vez al compilar, NHibernate vuelva a correr su “compilacion”.
Saludos
Yo siempre lo digo.. mientras más cabezas.. mejor se piensa.. jejeje. Gracias
Voy a pensar en los contras.. pero asi a lo rapido se me ocurre que como soy yo quien maneja la invocación del BuildSessionFactory desde la aplicación que pondremos como post-build, pudiera controlar que esta acción se realice solo si detecto que se ha modificado algún HBM.
Salu2
Omar
estoy empezando con NHibernate y necesito mapaer una BD Firebird que tanta estabilidad abra si el software constante mente esta accediendo al disco haciendo CRUD ¿o no me recomiendas mapaer la BD?