Escolar Documentos
Profissional Documentos
Cultura Documentos
Para abrir el blog no eleg mejor tema que el grandioso framework de persistencia, de
cual puedo estar hablando sino es NHibernate.
La idea principal de esta publicacin ser ni ms ni menos que proporcionar un ejemplo
integral de varias caractersticas que mucha falta hacen y que tanto cuesta aprender al
comenzar con esta herramienta.
Este artculo no tiene intencin de ser detallista ni explicar puntualmente cada aspecto
implementado, para ello podr encontrar artculos mas destacados como por ejemplo el
excelente articulo publicado en el Blog de Dario Quintana.
La idea final es simplemente proporcionar un ejemplo que permita ver varias
caractersticas funcionando juntas.
Aspectos implementados
Entre las caractersticas implementadas encontraran los siguientes puntos:
Descargar Ejemplo
Diagramas del Dominio
Eliminar en cascada
Como es de suponer esta facilidad de actualizar la cascada de elemetos relacionados es
de muchisima importancia, pero durante la utilizacin de la navegacin entre entidades
me encontre con un pequeo detalle que quera remarcar.
Se trata de la utilizacin de la propiedad inverse="true", esta es de suma importancia
cuando se esta utilizando navegacin bidireccional.
De no especificarse esta propiedad al momento de producirse, por ejemplo, la
eliminacion de un objeto padre, sus hijos seran actualizados y al no encontrase la
entidad superior generar una exception que indicara la imposibilidad de insertar null en
el campo de la tabla.
Esto podria resolverse facilmente marcando el campo de relacin para que permita null
en su contenido, pero no todos los tipos de realaciones en el modelo pueden hacer esto.
Un ejemplo del uso de esta propiedad podra encontrase en el achivo de mapeo de la
entidad Institucion (Institucion.hbm.xml), y la prueba de la eliminacion en cascada se
encuantra en el test: TestInstituciones -> EliminoInstitucion()
Nota: Si quieren probar como funciona esta propiedad eliminenla del archivo de mapeo
Institucion.hbm.xml, de la relacin con el Alumno por ejemplo, e intenten correr el test:
TestInstituciones -> EliminoInstitucion(), para ver los resultados.
Tambien podran marcar el campos "Institucion" de la tabla "Alumnos", observarn como
se soluciona el problema.
Implementacin
En la aplicacin encontraran que esta formada por varias capas entre ellas la de
Aplicacion y Presentacin, pero estas no estn implementadas, pues no era necesario
para el objetivo de aprender NHibernate, simplemente con la utilizacin del proyecto de
Test se pudo comprobar el correcto funcionamiento del framewok de persistencia.
Se debe remarcar que el dominio debe ser tomado algo inventado, no perteneciante a un
dominio existente, pensado simplemente para lograr el objetivo principal de verificar la
funcionalidad de NHibernate.
Si bien el cdigo es sumamente til con tan solo visualizar el cdigo de los test, asi como
tambin el de los mapper, es posible ejecutarlo si se conecta apropiadamente a una base
de datos. Para ellos, como en la mayora de las aplicaciones, simplemente se debe
modificar el app.config del proyecto de pruebas, apuntandolo a la DB que corresponda.
Para crear la estructura de la base de datos se encontrar un proyecto con los script de
creacion de la estructura, o en caso contrario podran hacer uso de los archivos .mdf y
.ldf de la base de datos, adjuntandolos por medio de la opciones de attach del SQL
Server 2005.
Para la ejecucin de los test hice uso de UnitRun, de esta forma poda ejecutarlos uno a
uno en modo debug e ir analizando como se comporta cada uno.
Conclusin
Espero antes que nada haber aportado un granito mas de arena a la investigacin de este
potentsimo framework, apuntando principalmente aspectos un poco mas avanzados de
los cuales es complicado encontrar ejemplo cerrados que los integre.
Quedan varios puntos todava por probar, como ser el mapeo a store procedure,
paginado, etc
Espero les sea de utilidad y cualquier duda, modificacin o error que encuentren sern
bienvenidos.