Come lavorare con Fluent NHibernate in C #

Gli ORM (object relational mapper) semplificano l'accesso ai dati nell'applicazione consentendo di scrivere codice per eseguire operazioni CRUD (creazione, lettura, aggiornamento ed eliminazione). I framework ORM sono in uso da molto tempo per eliminare il disadattamento di impedenza che esiste tra l'oggetto e i modelli di dati in un'applicazione. In sostanza, gli ORM consentono di scrivere codice per eseguire operazioni CRUD senza la necessità di interagire direttamente con il provider di database sottostante. Pertanto, l'utilizzo degli ORM ti aiuta a isolare il modello a oggetti della tua applicazione dal modello dati.

Perché Fluent NHibernate?

NHibernate memorizza le informazioni di mappatura in formato XML in file .hbm: dovresti avere un file .hbm per ogni classe di entità. Questo file .hbm viene utilizzato per mappare le entità alle tabelle del database corrispondenti. Quando si utilizza Fluent NHibernate, non è più necessario utilizzare gli ingombranti file .hbm.xml che si sono dovuti utilizzare lavorando con NHibernate.

Fluent NHibernate è la controparte sicura compilata staticamente e compilata del popolare strumento ORM NHibernate che può essere utilizzato per creare mappatura tra le classi POCO e il motore NHibernate senza la necessità di ingombranti file XML. Fornisce un'API fluente che consente inoltre di utilizzare LINQ per eseguire query sui dati in cima al motore NHibernate. Nelle sezioni che seguono, discuteremo di come installare Fluent NHibernate, creare modelli, mappare questi modelli o classi di entità e utilizzare Fluent NHibernate per eseguire operazioni CRUD.

Iniziare

Per iniziare a utilizzare Fluent NHibernate, segui questi passaggi:

  1. Apri l'IDE di Visual Studio 2015
  2. Fare clic su File -> Nuovo -> Progetto
  3. Crea un nuovo progetto: per semplicità, crea un'applicazione Windows
  4. Specifica un nome per il progetto
  5. Fare clic su OK per salvare il progetto

Ora che un progetto è stato creato in Visual Studio, potresti voler installare Fluent NHibernate per usarlo nella tua applicazione. Se è installato NuGet, l'opzione più semplice è installare Fluent NHibernate tramite NuGet Package Manager. A tale scopo, selezionare il progetto nella finestra Esplora soluzioni, fare clic con il pulsante destro del mouse e selezionare l'opzione "Gestisci pacchetti NuGet ..." per installare il framework Fluent NHibernate da NuGet.

Lavorare con Fluent NHibernate

Per lavorare con Fluent NHibernate devi prima creare una classe modello. Considera la seguente tabella di database.

CREATE TABLE [dbo].[Product]

(

   [Id] INT NOT NULL PRIMARY KEY,

   [Name] VARCHAR(50) NULL,

   [Description] VARCHAR(50) NULL

)

Ecco la classe del modello corrispondente.

public class Product

   {

       public virtual int Id { get; set; }

       public virtual string Name { get; set; }

       public virtual string Description { get; set; }

   }

Ora che la tabella del database e la classe del modello corrispondente sono pronte, il passaggio successivo consiste nel creare la mappatura necessaria. Per mappare un'entità in Fluent NHibernate dovresti avere una classe di mappatura corrispondente. Tali classi di mappatura dovrebbero derivare da ClassMap dove T rappresenta l'entità che stai utilizzando. Fluent NHibernate utilizza classi C # fortemente tipizzate per mappare le proprietà delle classi del modello ai campi corrispondenti delle tabelle del database.

Ecco la classe di mappatura denominata ProductMap.

public class ProductMap : ClassMap

   {

       public ProductMap()

       {

           Id(x => x.Id);

           Map(x => x.Name);

           Map(x => x.Description);

           Table("Product");

       }

   }

Il prossimo passo è creare una classe helper per connettersi al nostro database. Ecco come sarebbe questa classe:

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

       }

   }

Notare la chiamata a sessionFactory.OpenSession () nell'ultima istruzione: questa chiamata in realtà crea una sessione di comunicazione con il database sottostante, cioè apre una connessione al database in uso. È ora possibile richiamare il metodo statico FluentNHibernateHelper.OpenSession () per aprire una connessione al database. Il frammento di codice seguente illustra come sfruttare la classe helper creata in precedenza per aggiungere un record Product alla tabella del database Product.

static void Main(string[] args)

       {

           using (var session = FluentNHibernateHelper.OpenSession())

           {

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

               session.SaveOrUpdate(product);

           }

       }

Il frammento di codice seguente mostra come eseguire query sui dati dal database utilizzando la nostra classe helper Fluent NHibernate.

using (ISession session = FluentNHibernateHelper.OpenSession())

           {

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

               //Usual code

           }

Per lavorare con gli esempi di codice forniti in questo articolo, assicurati che i seguenti spazi dei nomi siano stati aggiunti alla tua classe.

  • using FluentNHibernate.Cfg;
  • using FluentNHibernate.Cfg.Db;
  • utilizzando NHibernate;
  • using NHibernate.Linq;
  • using NHibernate.Tool.hbm2ddl;
  • using System.Linq;

Puoi saperne di più su come lavorare con Fluent NHibernate da GitHub.