Practica 1 - Introducción NHibernate
-
Upload
nicolas-fumo -
Category
Documents
-
view
228 -
download
0
Transcript of Practica 1 - Introducción NHibernate
-
7/21/2019 Practica 1 - Introduccin NHibernate
1/14
1
1 Programacion III UTN ReconquistaDocumento de: A.S.: Silvio Moschen provisto para Marcelo Agustini
Introduccin a HibernateHibernate es una herramienta de Mapeo objeto-relacional (ORM) para la plataforma Java (y disponible
tambin para .Net con el nombre de NHibernate) que facilita el mapeo de atributos entre una base de
datos relacional tradicional y el modelo de objetos de una aplicacin, mediante archivos declarativos
(XML) o anotaciones en los beans de las entidades que permiten establecer estas relaciones.
Hibernate es software libre, distribuido bajo los trminos de la licencia GNU LGPL.
Como todas las herramientas de su tipo, Hibernate busca solucionar el problema de la diferencia entre
los dos modelos de datos coexistentes en una aplicacin: el usado en la memoria de la computadora
(orientacin a objetos) y el usado en las bases de datos (modelo relacional). Para lograr esto permite al
desarrollador detallar cmo es su modelo de datos, qu relaciones existen y qu forma tienen. Con esta
informacin Hibernate le permite a la aplicacin manipular los datos en la base de datos operando sobre
objetos, con todas las caractersticas de la POO. Hibernate convertir los datos entre los tipos utilizados
por Java y los definidos por SQL. Hibernate genera las sentencias SQL y libera al desarrollador del
manejo manual de los datos que resultan de la ejecucin de dichas sentencias, manteniendo la
portabilidad entre todos los motores de bases de datos con un ligero incremento en el tiempo de
ejecucin.
Hibernate est diseado para ser flexible en cuanto al esquema de tablas utilizado, para poder
adaptarse a su uso sobre una base de datos ya existente. Tambin tiene la funcionalidad de crear la base
de datos a partir de la informacin disponible.
Hibernate ofrece tambin un lenguaje de consulta de datos llamado HQL (Hibernate Query Language), al
mismo tiempo que una API para construir las consultas programticamente (conocida como "criteria").
Hibernate para Java puede ser utilizado en aplicaciones Java independientes o en aplicaciones Java EE,
mediante el componente Hibernate Annotations que implementa el estndar JPA, que es parte de esta
plataforma.
HistoriaHibernate fue una iniciativa de un grupo de desarrolladores dispersos alrededor del mundo conducidos
por Gavin King. Tiempo despus, JBoss Inc. (empresa comprada por Red Hat) contrat a los principales
desarrolladores de Hibernate y trabaj con ellos en brindar soporte al proyecto.
La rama actual de desarrollo de Hibernate es la 3.x, la cual incorpora nuevas caractersticas, como una
nueva arquitectura Interceptor/Callback, filtros definidos por el usuario, y opcionalmenteel uso de
anotaciones para definir la correspondencia en lugar de (o conjuntamente con) los archivos XML.
Hibernate 3 tambin guarda cercana con la especificacin EJB 3.0 (aunque apareciera antes de la
publicacin de dicha especificacin por Java Community Process) y acta como la espina dorsal de la
implementacin de EJB 3.0 en JBoss.
Utilizar un framework de Object Relational Mapping para resolver nuestra lgica de persistencia es una
tcnica madura que ha demostrado ser extremadamente superior a las tcnicas tradicionales basadas
en el uso de APIs como ADO.NET.
Preguntas FrecuentesQu entendemos por lgica de persistencia?
Dnde persistimos nuestros datos?
Estrategias de persistencia.
Estrategia tpica.
Estrategia recomendada.
-
7/21/2019 Practica 1 - Introduccin NHibernate
2/14
2
2 Programacion III UTN ReconquistaDocumento de: A.S.: Silvio Moschen provisto para Marcelo Agustini
Qu es NHibernate?
Dnde puedo leer ms acerca de las tcnicas de Object Relational Mapping?
Ejemplo prctico utilizando NHibernate.
Cmo se instala NHibernate?
Cmo funciona NHibernate?
IntroduccinDefinir la estrategia de persistencia de una aplicacin es una de las decisiones de arquitectura ms
importantes.
En una aplicacin estndar ms del 50% del cdigo generado est relacionado con lgica de persistencia.
Qu entendemos por lgica de persistencia?La lgica de persistencia abarca todo el cdigo que mi aplicacin requiere para poder grabar y recuperar
la informacin inherente a su dominio. Por ejemplo, una aplicacin de eBanking va a persistir y
recuperar informacin de cuentas, clientes, transacciones, etc.
Dnde persistimos nuestros datos?Por lo general, la mayora de estas aplicaciones persisten su informacin en una base de datos relacional
(RDBMS). Si bien existen otros medios alternativos, como ser una base de datos orientada a objetos
(OODBMS), ninguno de estos se compara con la madurez y la popularidad de las bases de datos
relacionales.
Utilizar un medio relacional ofrece una serie de ventajas muy importantes, por ejemplo:
Tecnologa madura
Muy eficiente en la grabacin y recuperacin de grandes volmenes de datos.
Soportan transacciones (la mayora).
Aseguran la integridad de los datos (niveles de aislamiento, locking, etc.).
Excelente manejo de la seguridad.
Protocolo de consulta estndar (SQL).
Buen soporte (muchos DBAs).
Oferta variada.
Estrategias de persistenciaEn una aplicacin .NET, al igual que sucede con otras tecnologas, podemos implementar nuestra lgica
de persistencia aplicando distintas estrategias. Como ya mencionamos al principio, determinar cul es la
estrategia ms adecuada es una decisin de arquitectura ms que importante.
Estrategia tpicaPara el desarrollador .NET, la estrategia ms tpica es utilizar directamente ADO.NET.
Bajo esta estrategia, la mayor parte del cdigo escrito se centra en recuperar un snapshot de la base de
datos en un DataSet, modificar eventualmente el DataSet en memoria, para posteriormente, a travs
del DataAdapter correspondiente, aplicar los cambios contra la base de datos subyacente. Si bien
los DataSets funcionan correctamente, desde el punto de vista de la orientacin a objetos evidencian las
siguientes desventajas:
-
7/21/2019 Practica 1 - Introduccin NHibernate
3/14
3
3 Programacion III UTN ReconquistaDocumento de: A.S.: Silvio Moschen provisto para Marcelo Agustini
Los DataSets representan informacin tabular, no representan objetos de mi dominio
Los DataSets representan relaciones entre tablas, no representan los distintos tipos de asociacio nes
que surgen entre los objetos de mi dominio.
Los DataSets son extremadamente sensibles a los cambios que puedan surgir en el esquema de la
base de datos.
El tipo de cdigo generado para manipular los DataSets tiende a ser repetitivo y relativament e difcil
de mantener.
Estrategia recomendadaUna estrategia ms elegante y compatible con las buenas prcticas de diseo pregonadas en estos
ltimos 10 aos, es la de disear un modelo de objetos del dominio que represente el 100% de la
informacin que maneja mi aplicacin y utilizar un framework de Object Relational Mapping(ORM) que
resuelva en forma transparente la persistencia de estos objetos contra una base de datos relacional.
Utilizar un framework ORM ofrece entre otras las siguientes ventajas:
Persistencia transparante:Mis objetos del dominio no saben nada acerca de la base de datos donde
son persistidos, el framework lo resuelve en forma automtica utilizando archivos de mapping
expresados en XML.
Soporte de polimorfismo:Puedo cargar jerarquas de objetos en forma polimrfica.
Soporte de los 3 niveles de mapeo de herencia:Puedo mapear toda una jerarqua de clases a una sola
tabla, crear una tabla por cada clase concreta o crear una tabla por cada escaln de la jerarqua.
Soporte completo de asociaciones: Los frameworks de ORM soportan el mapeo de todos los tipos de
relaciones que pueden existir en un modelo de objetos del dominio (asociaciones 1..1, 1...N, N..M,
unidireccionales y
bidireccionales).
Soporte de carga de objetos Proxy:Puedo cargar objetos que solo contengan la clave del objeto
completo.
Soporte de caching:En el contexto de una transaccin, puedo disminuir la cantidad de veces que voy
contra la base de datos cacheando en memoria los objetos que son accedidos varias veces. Soporte de mltiples dialectos SQL:Puedo independizarme completamente del tipo de base de datos
utilizada. Mi aplicacin puede persistir sus datos en
SQL Server, en Oracle, en MySQL, etc. simplemente cambiando la configuracin correspondiente.
En .NET existen varios frameworks de persistencia que implementan gran parte de los features
mencionados anteriormente.
De todos estos frameworks, consideramos que el ms recomendable es NHibernate.
Qu es NHibernate?NHibernate es un framework de Object-Relational-Mapping open-source que resuelve en forma
automtica la persistencia de mis objetos de dominio .NET.
NHibernate est basado en el popular framework open-source Hibernate surgido en la comunidad Java
en el ao 2002.
-
7/21/2019 Practica 1 - Introduccin NHibernate
4/14
4
4 Programacion III UTN ReconquistaDocumento de: A.S.: Silvio Moschen provisto para Marcelo Agustini
Cmo funciona NHibernate?Para utilizar el framework debemos seguir los siguientes pasos:
Implementar nuestras clases de dominio persistentes en .NET.
Crear las tablas asociadas a cada clase persistente.
Crear el archivo de mapping de cada clase persistente. Crear el archivo de configuracin de NHibernate.
Utilizar la API de NHibernate para persistir y recuperar mis objetos.
Los dialectos soportados actualmente por NHibernate son:RDBMSDialect
Microsoft SQL Server 2000NHibernate.Dialect.MsSql2000Dialect
Microsoft SQL Server 7NHibernate.Dialect.MsSql7Dialect
DB2NHibernate.Dialect.DB2Dialect
PostgreSQLNHibernate.Dialect.PostgreSQLDialect
MySQLNHibernate.Dialect.MySQLDialect
Oracle (any version)NHibernate.Dialect.OracleDialectOracle 9/10gNHibernate.Dialect.Oracle9Dialect
SybaseNHibernate.Dialect.SybaseDialect
FirebirdNHibernate.Dialect.FirebirdDialect
Existen otros drivers para NHibernate (puede funcionar con cualquier conector ADO)
Para los desarrolladores ADO.NET el valor de la propiedad hibernate.connection.connection_string
les debe resultar familiar.
Se trata justamente de la cadena de conexin en formato ADO.NET que NHibernate utilizar para
conectarse con nuestra base de datos.
Utilizar la API de NHibernate para persistir y recuperar mis objetos.
Para poder utilizar la API de NHIbernate desde nuestra aplicacin lo nico que tenemos que hacer es
agregar una referencia a la librera NHibernate.dll ubicada en la carpeta de \bin
ms la referencia a la biblioteca de clases que contiene nuestros objetos de dominio y sus mappings.
Una sesin de NHIbernate funciona como una fachada que encapsula el acceso a las funcionalidades
ms importantes que ofrece el framework.
A travs de la sesin, NHIbernate nos permite manejar el contexto transaccional de nuestra lgica
ConclusionesUtilizar un framework de ORM simplifica enormemente la programacin de lgica de persistencia. Se
trata de una idea completamente madura que cada vez se vuelve ms popular. Nuestro cdigo se
abstrae completamente del schema y tipo de base de datos utilizada. Para hacer que este ejemplo
funcione contra otra base de datos (ej. MySQL) lo nico que tendramos que hacer sera cambiar el
dialecto y la cadena de conexin en el archivo de configuracin de nuestra aplicacinnada ms.
Nuestra lgica de negocios trabaja contra un modelo de dominio completamente orientado a objetos.
Generamos entre un 30% y un 40% menos de cdigo y como si esto fuera poco el tipo de cdigo
generado es mucho ms
sencillo y mantenible.
-
7/21/2019 Practica 1 - Introduccin NHibernate
5/14
5
5 Programacion III UTN ReconquistaDocumento de: A.S.: Silvio Moschen provisto para Marcelo Agustini
Tutorial de NHibernate - Primeros pasos
NHibernatees un framework de O/RM (Object/Relational Mapping), un port de Hibernate de Java, que tiene comofuncin principal mapear los objetos desde una aplicacin .Net a una base de datos Relacional. Primero, hablemos
de como NH (NHibernate) realiza su funcionamiento bsico.
Cdigo de ejemplo
En el siguiente ejemplo ser solamente puntapi inicial para introducirnos en este framework de persistencia, si biencontiene algunos consejos como buenas prcticas pero no es lo que persigue, por esta razn los ejemplos sern
sencillos. De hecho, el modelo posee una clara correspondencia de 1 objeto => 1 tabla, lo cual en la realidad no debebuscarse, ya que los modelos de dominios y de datos buscan resolver problemas diferentes, y si estamos en
presencia de esto, es muy probable que no estemos explotando todo el potencial de ambos modelos, y por sobre todode esta herramienta. NHibernate nos da la libertad de realizar un modelo de dominio, y despus mapearlo a un
modelo de tablas, y viceversa.
Modelo de Dominio
El modelo de dominio con el cual trabajaremos ser el siguiente:
-
7/21/2019 Practica 1 - Introduccin NHibernate
6/14
6
6 Programacion III UTN ReconquistaDocumento de: A.S.: Silvio Moschen provisto para Marcelo Agustini
Modelo relacional
El modelo de datos estar representado por estas tres relaciones (tablas):
Mappings Files Archivos de Mapeo:
NH para poder conocer la correspondencia que existe entre los objetos y las tablas lo hace por medio de la
configuracin de mapeo. Esta configuracin se puede hacer de forma programtica o bien, la ms utilizada, que
consiste en archivos de mapeo XML (mapping files). Estos archivos poseen la informacin necesaria para podersaber en qu tabla/s se tiene/n que guardar cada objeto en que tabla tengo que buscar para obtener un objeto. Los
nombres de los archivos terminan con el sufijo .hbm.xml. Las extensiones de estos archivos xml es .hbm.xml. Por
ejemplo Factura.hbm.xml, LineaFactura.hbm.xml, Producto.hbm.xml.
Archivo de Mapeo de la clase Factura (Factura.hbm.xml):
Veamos los atributos del archivo. Al comienzo del archivo estamos indicando el nombre
del assembly: Dario.NH01, donde van a estar ubicadas las clases. Luego el namespace de dicha clase. Luego
comenzamos a tratar las caractersticas de la clase que queremos mapear con el atributo class, en este
caso Factura. Dentro de los tags ... vamos a indicar todas
las configuraciones de dicha clase. Un atributo que no hemos marcado en el mapping pero que viene activado pordefecto y vale la pena explicarlo es lazy="true". Con esto activamos la carga perezosa, lazy load, de modoque las colecciones no se cargarn hasta que sean utilizadas. Este funcionamiento se logra mediante un proxy y NHse encarga de manejarlo, para nosotros es transparente (por ahora).
Con el tag vamos a indicarle a NH qu property ser mapear con la clave primaria de la tabla, en este caso la
property Idse va a corresponder con la columna IdFactura, ser de tipo inty para indicar que un objeto se
considera como nuevo y no como que ya existe en la base, pondremos el atributo unsaved-value="0".
Tambien hemos asignado al generator el valor identity, con esto le decimos NH que se encargue de generar losvalores de la primary key. Si hubiramos querido asignarles nosotros el valor, deberamos reemplazar por el
-
7/21/2019 Practica 1 - Introduccin NHibernate
7/14
7
7 Programacion III UTN ReconquistaDocumento de: A.S.: Silvio Moschen provisto para Marcelo Agustini
valor assigned. Luego vamos a decirle que la propiedad Fecha, tiene que corresponderse con la
columna Fecha, esto es debido que no hemos indicado el nombre de la columna con el atributo column, y que va
a ser de tipo DateTime. Y con esto ya tenemos suficiente como realizar un ABM (Alta/Baja/Modificacin) de laentidad Factura.
Pero para hacer un poco ms interesante esto, agreguemos la relacin 1:N con la clase LineaFactura. Para esto
vamos a utilizar el atributo . Indicamos que el nombre de la coleccin se llamarLineas, y como es bag,
esta coleccin podr tener elementos repetidos. Para esto utilizamos una coleccin deltipo IList. Cabe destacar que podemos utilizar otro tipo de colecciones que se encuentran enla librera Iesi.Collections.dll.
Archivo de Mapeo de la clase LineaFactura (LineaFactura.hbm.xml):
Algo a notar en este archivo es la declaracin de la relacin many-to-onepara la propiedad Factura y tambinpara Producto.
Archivos de mapeo como recursos embebidosEs una prctica muy comn y recomendable el incluir los archivos de mapeo como recursos embebidos dentro de unassembly. Cualquier IDE de desarrollo moderna -Sharp Develop, Visual Studio Monodevelop-, nos permiten
configurar las propiedades de los archivos y que accin se debe tomar con ellos, dicha opcin se llama Action Build
/ Accin de Construccin y entonces debemos configurarla como: Embedded Resource/Recurso
embebido. Si olvidamos hacer esto con los archivos de mapeo, es posible que no tengamos ningn error enalgunos casos, pero no funcionar correctamente.
Preparando las clases
Mtodos y Propiedades
Al estar trabajando con clases con lazy="true", que es el valor por defecto, todos los mtodos y propiedades
deben ser declarados como virtual. De este modo NH puede crear un proxy de nuestras entidades, esto estransparente para nosotros.
Sobrescribiendo Equals y GetHashCode
Para poder trabajar correctamente con colecciones debemos sobrescribir estos mtodos. Sino sobrescribimos
el Equalsal hacer una operacin comolineaFactura1.Equals(lineaFactura2)podra
devolver falsean tratndose de la misma linea de factura, debido a que la comparacin se est haciendo por la
posiciones de memoria. Cuando sobrescribimos Equalspor ejemplo de esta manera:
-
7/21/2019 Practica 1 - Introduccin NHibernate
8/14
8
8 Programacion III UTN ReconquistaDocumento de: A.S.: Silvio Moschen provisto para Marcelo Agustini
publicoverrideboolEquals(objectobj){if(this== obj) returntrue;LineaFactura lineaFactura = obj asLineaFactura;if(lineaFactura == null) returnfalse;returnid == lineaFactura.id && Equals(factura, lineaFactura.factura);}
De este modo nos aseguramos de que 2 objetos son iguales si son iguales sus propiedades Idy Factura.
Ya hemos sobrescrito el Equals, ahora debemos hacer lo mismo con GetHashCode, debido a que 2 objetosiguales deben tener un mismo nmero de hash (y 2 objetos distintos pueden o no tener el mismo nmero de hash). Elnmero hash no representa un id, no tiene que ser nico.
Una posible implementacin podra ser:
publicoverrideintGetHashCode(){returnid + 29*factura.GetHashCode();}Con este mtodo nos aseguramos que 2 lneas factura devuelvan el mismo nmero al ser iguales. Al trabajar connmeros primos obtenemos buenas funciones hash. Lo importante aqu es hacer bien la funcin, la optimizacin de
esta funcin queda fuera del alcance del tutorial.
Implementando IEquatable
Todas las entidades implementan IEquatable, esto no es necesario para trabajar con NHibernate, solamente
es una manera de hacer que las comparaciones por medio de Equalsse realicen de forma tipada.
ISessionFactory e ISession
Una sesin es un marco de trabajo en el cual NH establece una conversacin entre la aplicacin y el motor de base
de datos relacional. Para construir una sesin, representado por ISessionalguien que nos provea la sesin, para
esto necesitamos de: ISessionFactory. El ISessionFactoryse encarga crear sesiones en nuestraaplicacin. En un momento, la aplicacin puede tener 1 o ms sesiones abiertas. Cada sesin representa un 1er. nivel
de cach, los objetos que son trados desde la base, o son guardados desde la aplicacin se encuentran en la cache deprimer nivel. Si se solicita un objeto a la base, primero se busca en la cach, si se encuentra ah el objeto, se lo
devuelve a la aplicacin sin solicitarlo al motor relacional. Sino se encuentra en la cach, se realiza la consulta a labase.
Por lo general debemos tener un ISessionFactory por aplicacin, sera necesario tener ms de uno en el caso de queestemos trabajando con ms de una base de datos a la vez.
Configuracin del ISessionFactory de la aplicacin
Para configurar el ISessionFactory, es decir, para decirle con qu motor de base de datos vamos a trabajar, la cadena
de conexin (connection string), el driver que utilizaremos entre otras cosas, como toda configuracin en NH, sepuede realizar de manera programtica (por cdigo) o mediante archivos de configuracin XML, y dentro de esta
ltima podemos hacerlo mediando elApp.config
o mediante elhibernate.cfg.xml
. Utilizaremos la ltima
en este caso:
-
7/21/2019 Practica 1 - Introduccin NHibernate
9/14
9
9 Programacion III UTN ReconquistaDocumento de: A.S.: Silvio Moschen provisto para Marcelo Agustini
NHibernate.Connection.DriverConnectionProviderNHibernate.Driver.SqlClientDriverNHibernate.Dialect.MsSql2005DialectDataSource=localhost\SQLEXPRESS;Initial Catalog=NH01;IntegratedSecurity=Truetrue
En esta configuracin hemos incluido el nombre del assemblydonde se encontrarn embebidos los archivos de
mapeo, en este caso el assembly es: Dario.NH01.El cdigo necesario para configurar NH al comienzo de la aplicacin es:
Configuration cfg = newConfiguration();
cfg.Configure("hibernate.cfg.xml");
ISessionFactory sesiones = cfg.BuildSessionFactory();
ISession sesion = sesiones.OpenSession();
Primeramente debemos crear un objeto del tipo Configuration, configurarlo
mediante Configure("hibernate.cfg.xml") y que se encargue de crear el ISessionFactory, por
medio del mtodoBuildSessionFactory(). Una vez que creamos el objeto sesionesdeltipo ISessionFactory, ya podemos comenzar a crear objetos ISession. En este caso trabajaremos con una
sola sesin en la aplicacin: sesion.
Es una buena prctica realizar un singleton del objeto ISessionFactorydebido a que es un proceso costoso
para la aplicacin, en otras palabras, la ejecucin de BuildSessionFactoryse debe hacer una vez durante laejecucin.
Creamos Productos, Facturas y Lneas
Ahora comenzamos con el cdigo de ejemplo, primero creamos Productos y los guardamos:
Producto prod1 = newProducto("Leche Entera", "Lacteos");
Producto prod2 = newProducto("Lavandina", "Limpieza");Producto prod3 = newProducto("Vasos", "Bazar");
sesion.Save(prod1);sesion.Save(prod2);sesion.Save(prod3);
Creamos 3 productos y los guardamos en la sesin sesionmediante el mtodo Save. Una vez hecho estopodemos continuar con la creacin de la Factura y sus LineaFactura.
-
7/21/2019 Practica 1 - Introduccin NHibernate
10/14
10
10 Programacion III UTN ReconquistaDocumento de: A.S.: Silvio Moschen provisto para Marcelo Agustini
Factura factura = newFactura(DateTime.Now);factura.Lineas.Add(newLineaFactura(factura, prod1, 2.25m, 5));factura.Lineas.Add(newLineaFactura(factura, prod2, 3.5m, 1));factura.Lineas.Add(newLineaFactura(factura, prod3, 5.4m, 10));
sesion.Save(factura);
sesion.Flush();
sesion.Close();
Una vez creada factura, podemos realizar un Save. Notse aqu que hemos guardado la factura, y las lneastambin se guardaron. Esto es debido a que en el mapping de Factura hemos configurado el
Agregado/Actualizacin/Borrado en cascada mediante la siguiente lnea cascade="all-delete-orphan" .
Despus de realizar todos las inserciones, procedemos a realizar Flush()para que se ejecuten las sentencias SQLpropiamente dichas contra el servidor, en ese momento se guardan todos nuestros objetos, antes de esto los objetos
permanecan en el objeto sesion (en la cache de 1er. nivel).
Luego de que hemos usado la sesin, liberamos los recursos realizando un Close().
Intellisense para los archivos de mapeo en Visual Studio
Los archivos de mapeo de este ejemplo fueron escritos sin ayuda de una herramienta de generacin de cdigo.Solamente con ayuda del Intellisense de Visual Studio en los archivos XML. Para tener esta funcionalidad se deben
copiar los archivos nhibernate-mapping-2.2.xsdy nhibernate-configuration-2.2.xsd al
directorio C:\Archivos de programa\Microsoft Visual Studio 8\Xml\Schemasdonde se tieneinstalado el Visual Studio.
-
7/21/2019 Practica 1 - Introduccin NHibernate
11/14
11
11 Programacion III UTN ReconquistaDocumento de: A.S.: Silvio Moschen provisto para Marcelo Agustini
El primer proyecto usando NHibernate1. Crear un proyecto utlizando C# como lenguaje, una Console Application. Llamarlo Practica1.2. En la solapa References agregar las libreras necesarias para trabajar con el framework ORM
NHibernate.
3. En el proyecto, crear dos carpetas, Entities y Mappings, Entities contendr nuestras Clases yMapping los archivos de mapeo (hbm) que necesita NHibernate para asociar las clases a una
base de datos relacional.
4. Sobre la carpeta Entities, creamos nuestra Clase Persistente.
-
7/21/2019 Practica 1 - Introduccin NHibernate
12/14
12
12 Programacion III UTN ReconquistaDocumento de: A.S.: Silvio Moschen provisto para Marcelo Agustini
5. En la carpeta Mappings crear el archivo hbm (archivo xml) de Mapeo.
En NHibernate, los archivos de mapeo se deben marcar como Embedded Resource en la opcinBuild Action
6. Ahora creamos el archivo de configuracin de hibernate, en la raz del proyecto (archivo xml)
El archivo de configuracin de hibernate contiene la informacin inherente a la base de datos relacional
a utilizar, las directivas para la creacin de tablas, la localizacin de los Mappings, etc.
-
7/21/2019 Practica 1 - Introduccin NHibernate
13/14
13
13 Programacion III UTN ReconquistaDocumento de: A.S.: Silvio Moschen provisto para Marcelo Agustini
NHibernate.Connection.DriverConnectionProviderNHibernate.Driver.MySqlDataDriverNHibernate.Dialect.MySQLDialectServer=localhost;Database=sistemas3;UserID=root;Password=true
truecreate-drop
En NHibernate, el archivo hibernate.cfg.xml debe marcarse como Copy Always en la opcin
Copy to Output Directory
Operaciones ms frecuentes de Hibernate
Savepersiste un objeto
SaveorUpdatepersiste/actualiza un objeto
Updateactualiza un objeto
Removeelimina un objeto
Las operaciones de Hibernate se llevan a cabo en el marco de tres objetos
Configuration: es el objeto que carga las configuraciones especificadas en el hibernate.cfg.xml
SessionFactory: es el encargado de entablar una conversacin con la Base de Datos.
Session: se instancia a partir de un SessionFactory y permite trabajar con objetos y consultas (HQL, Linq,
Criteria, Native SQL)
-
7/21/2019 Practica 1 - Introduccin NHibernate
14/14
14
14 Programacion III UTN ReconquistaDocumento de: A.S.: Silvio Moschen provisto para Marcelo Agustini
7. Probando NHibernate, escribir el test en el archivo Program.css
usingSystem;usingSystem.Collections.Generic;usingSystem.Text;
usingNHibernate.Cfg;usingNHibernate;usingPractica1.Entities;
namespacePractica1{
classProgram{
staticvoidMain(string[] args){
Configurationcfg = newConfiguration();
cfg.Configure("hibernate.cfg.xml");
ISessionFactorysesiones = cfg.BuildSessionFactory();
ISessionsesion = sesiones.OpenSession();
Gruposg1 = newGrupos();g1.Descrip = "Grupo NHibernate 1";
sesion.Save(g1);
Gruposg2 = newGrupos();g2.Descrip = "Grupo NHibernate 2";
sesion.Save(g2);
sesion.Flush();
IQueryquery = sesion.CreateQuery("from Grupos c");IList lista = query.List();foreach(Gruposc inlista)
Console.WriteLine("ID.: "+ c.Id.ToString() +" Grupo: "+ c.Descrip);
sesion.Close();
Console.ReadLine();}
}}