practica 1 - introducción nhibernate

Upload: nicolas-fumo

Post on 07-Feb-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

  • 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();}

    }}