NHibernate - Descripción general
En este capítulo hablaremos sobre qué es NHibernate, en qué plataformas se puede implementar, cuáles son sus ventajas y otros aspectos relacionados.
¿Qué es NHibernate?
NHibernate es un mapeador relacional de objetos de código abierto maduro para el marco .NET. Está desarrollado de forma activa, con todas las funciones y se utiliza en miles de proyectos exitosos. Está construido sobreADO.NET y la versión actual es NHibernate 4.0.4.
NHibernate es un mapeador relacional de objetos .NET de código abierto y se distribuye bajo la GNU Lesser General Public License.
Está basado en Hibernate, que es un mapeador relacional de objetos de Java popular y tiene una base de código muy madura y activa.
Proporciona un marco para mapear un modelo de dominio orientado a objetos a una base de datos relacional tradicional.
NHibernate fue iniciado por Tom Barrett y este proyecto existe desde febrero de 2003, que fue su primer compromiso.
Es un gran proyecto y ofrece mucha funcionalidad.
Hay un NuGet package disponible, lo que hace que sea muy fácil de agregar a un proyecto.
¿Por qué NHibernate?
Ahora la pregunta es por qué necesitamos object-relational mappers? Es porque hay una desconexión entre el mundo de los objetos y el mundo relacional.
En el mundo de los objetos, todo se basa en objects; llamamos objetos a aquellas cosas que tienen nuestros datos.
El mundo relacional está basado en conjuntos y estamos tratando con tablas y filas que son diferentes al mundo de los objetos.
En el mundo de los objetos, tenemos unidirectional associations. Si un cliente tiene un puntero a un pedido, no significa necesariamente que un pedido tenga un puntero hacia un cliente, podría o no.
En el mundo relacional, todas las asociaciones son bidirectional y se puede hacer con una clave externa.
Todas las asociaciones son intrínsecamente bidireccionales, por lo que cuando se trata de un mapeo relacional de objetos, también debemos lidiar con esta desconexión.
En el mundo de los objetos, estamos trabajando con punteros que son unidireccionales, mientras que en el mundo relacional, tenemos claves externas que son inherentemente bidireccionales.
El mundo de los objetos tiene esta noción de herencia, donde un vehículo puede tener varias subclases diferentes, por lo que un automóvil es un tipo de vehículo, un bote es un tipo de vehículo y un automóvil deportivo es un tipo de automóvil, estos tipos de relaciones de herencia.
El mundo relacional no tiene esta noción de herencia.
Cartografía
Entonces, ¿cómo mapeamos todos estos disjoint relationships?Este concepto de mapeo proviene del mapeador relacional de objetos. Hay principalmente tres cosas que entender como se muestra en el siguiente diagrama.
En su aplicación, necesitará definiciones de clase, que normalmente es el código C # y su código .NET que representa nuestras clases, como clase de empleado, clase de cliente, clase de pedido, etc.
En la parte inferior, puede ver un esquema de base de datos, que es nuestro Data Definition Language en una base de datos relacional que especifica cómo se ve una tabla de clientes, cómo se ve una tabla de empleados.
Entre estos tenemos los metadatos de mapeo que le dicen al mapeador relacional de objetos cómo traducir del mundo de objetos en C # al mundo de la base de datos en términos de filas y columnas y relaciones de clave externa.
Estos metadatos de mapeo se pueden representar de diferentes formas y veremos varias de estas formas diferentes, más típicas en la aplicación NHibernate.
Está representado por HBM (Hibernate Mapping) archivos, que son archivos XML.
Base de datos compatible
NHibernate admite una amplia variedad de bases de datos diferentes. Se puede acceder a cualquier base de datos relacional existente a NHibernate.
El servidor SQL es la principal base de datos admitida, eso es lo que la mayoría de los desarrolladores están usando durante el desarrollo, es probablemente la más común.
También works very well with Oracle.
También es compatible con DB2, Firebird, MySQL, PostgreSQL, SQL Lite
También tiene ODBC and OLEDB drivers.