Cómo trabajar con Fluent NHibernate en C #

Los ORM (mapeadores relacionales de objetos) simplifican el acceso a los datos en su aplicación al permitirle escribir código para realizar operaciones CRUD (Crear, Leer, Actualizar y Eliminar). Los marcos ORM se han utilizado durante mucho tiempo para eliminar la discrepancia de impedancia que existe entre el objeto y los modelos de datos en una aplicación. En esencia, los ORM le permiten escribir código para realizar operaciones CRUD sin la necesidad de interactuar directamente con el proveedor de la base de datos subyacente. Por lo tanto, el uso de ORM lo ayuda a aislar el modelo de objetos de su aplicación del modelo de datos.

¿Por qué Fluent NHibernate?

NHibernate almacena la información de mapeo en formato XML en archivos .hbm; debe tener un archivo .hbm para cada clase de entidad. Este archivo .hbm se utiliza para asignar las entidades a las tablas de la base de datos correspondiente. Al usar Fluent NHibernate, ya no necesita usar los engorrosos archivos .hbm.xml que ha tenido que usar al trabajar con NHibernate.

Fluent NHibernate es la contraparte segura de compilación y compilación estática de la popular herramienta de ORM NHibernate que se puede utilizar para crear mapeo entre las clases POCO y el motor NHibernate sin la necesidad de archivos XML engorrosos. Proporciona una API fluida que también le permite usar LINQ para consultar datos en la parte superior del motor NHibernate. En las secciones que siguen, discutiremos cómo podemos instalar Fluent NHibernate, crear modelos, mapear estos modelos o clases de entidad y usar Fluent NHibernate para realizar operaciones CRUD.

Empezando

Para comenzar a usar Fluent NHibernate, siga estos pasos:

  1. Abrir IDE de Visual Studio 2015
  2. Haga clic en Archivo -> Nuevo -> Proyecto
  3. Cree un nuevo proyecto: en aras de la simplicidad, cree una aplicación de Windows
  4. Especifique un nombre para el proyecto
  5. Haga clic en Aceptar para guardar el proyecto.

Ahora que se ha creado un proyecto en Visual Studio, es posible que desee instalar Fluent NHibernate para usarlo en su aplicación. Si tiene NuGet instalado, la opción más sencilla es instalar Fluent NHibernate a través del Administrador de paquetes NuGet. Para hacer esto, seleccione el proyecto en la ventana del Explorador de soluciones, haga clic con el botón derecho y seleccione la opción "Administrar paquetes NuGet ..." para instalar el marco Fluent NHibernate desde NuGet.

Trabajar con Fluent NHibernate

Para trabajar con Fluent NHibernate, primero debe crear una clase modelo. Considere la siguiente tabla de la base de datos.

CREATE TABLE [dbo].[Product]

(

   [Id] INT NOT NULL PRIMARY KEY,

   [Name] VARCHAR(50) NULL,

   [Description] VARCHAR(50) NULL

)

Aquí está la clase de modelo correspondiente.

public class Product

   {

       public virtual int Id { get; set; }

       public virtual string Name { get; set; }

       public virtual string Description { get; set; }

   }

Ahora que la tabla de la base de datos y la clase de modelo correspondiente están listas, el siguiente paso es crear el mapeo necesario. Para mapear una entidad en Fluent NHibernate, debe tener una clase de mapeo correspondiente. Dichas clases de mapeo deben derivar de ClassMap, donde T representa la entidad que está utilizando. Fluent NHibernate usa clases C # fuertemente tipadas para mapear las propiedades de las clases modelo a los campos correspondientes de las tablas de la base de datos.

Aquí está la clase de mapeo llamada ProductMap.

public class ProductMap : ClassMap

   {

       public ProductMap()

       {

           Id(x => x.Id);

           Map(x => x.Name);

           Map(x => x.Description);

           Table("Product");

       }

   }

El siguiente paso es crear una clase auxiliar para conectarse a nuestra base de datos. Así es como se vería esta clase:

public static class FluentNHibernateHelper

   {

       public static ISession OpenSession()

       {

string connectionString = "Write your database connection string here";

           ISessionFactory sessionFactory = Fluently.Configure()

               .Database(MsSqlConfiguration.MsSql2012

                 .ConnectionString(connectionString).ShowSql()

               )

               .Mappings(m =>

                         m.FluentMappings

                             .AddFromAssemblyOf())

               .ExposeConfiguration(cfg => new SchemaExport(cfg)

                .Create(false, false))

               .BuildSessionFactory();

           return sessionFactory.OpenSession();

       }

   }

Tenga en cuenta la llamada a sessionFactory.OpenSession () en la última declaración: esta llamada en realidad crea una sesión de comunicación con la base de datos subyacente, es decir, abre una conexión a la base de datos en uso. Ahora puede invocar el método estático FluentNHibernateHelper.OpenSession () para abrir una conexión a la base de datos. El siguiente fragmento de código ilustra cómo puede aprovechar la clase auxiliar creada anteriormente para agregar un registro de Producto a la tabla de base de datos de Producto.

static void Main(string[] args)

       {

           using (var session = FluentNHibernateHelper.OpenSession())

           {

               var product = new Product { Name = "Lenovo Laptop", Description = "Sample product" };

               session.SaveOrUpdate(product);

           }

       }

El siguiente fragmento de código muestra cómo puede consultar datos de la base de datos utilizando nuestra clase auxiliar Fluent NHibernate.

using (ISession session = FluentNHibernateHelper.OpenSession())

           {

               var products = session.Query().ToList();

               //Usual code

           }

Para trabajar con los ejemplos de código que se dan en este artículo, debe asegurarse de que se hayan agregado los siguientes espacios de nombres a su clase.

  • usando FluentNHibernate.Cfg;
  • usando FluentNHibernate.Cfg.Db;
  • usando NHibernate;
  • utilizando NHibernate.Linq;
  • usando NHibernate.Tool.hbm2ddl;
  • utilizando System.Linq;

Puede obtener más información sobre cómo trabajar con Fluent NHibernate desde GitHub.