Comment travailler avec Fluent NHibernate en C #

Les ORM (mappeurs relationnels d'objet) simplifient l'accès aux données dans votre application en vous permettant d'écrire du code pour effectuer des opérations CRUD (Créer, Lire, Mettre à jour et Supprimer). Les frameworks ORM sont utilisés depuis longtemps pour éliminer le décalage d'impédance qui existe entre l'objet et les modèles de données dans une application. Essentiellement, les ORM vous permettent d'écrire du code pour effectuer des opérations CRUD sans avoir besoin d'interagir directement avec le fournisseur de base de données sous-jacent. Ainsi, l'utilisation des ORM vous aide à isoler le modèle objet de votre application du modèle de données.

Pourquoi Fluent NHibernate?

NHibernate stocke les informations de mappage au format XML dans des fichiers .hbm - vous devriez avoir un fichier .hbm pour chaque classe d'entité. Ce fichier .hbm est utilisé pour mapper les entités aux tables de base de données correspondantes. En utilisant Fluent NHibernate, vous n'avez plus besoin d'utiliser les fichiers .hbm.xml encombrants que vous avez dû utiliser lorsque vous travaillez avec NHibernate.

Fluent NHibernate est l'homologue compilé et compilé de manière statique du populaire outil ORM NHibernate qui peut être utilisé pour créer un mappage entre les classes POCO et le moteur NHibernate sans avoir besoin de fichiers XML encombrants. Il fournit une API Fluent qui vous permet également d'utiliser LINQ pour interroger des données au-dessus du moteur NHibernate. Dans les sections qui suivent, nous discuterons de la façon dont nous pouvons installer Fluent NHibernate, créer des modèles, mapper ces modèles ou classes d'entités et utiliser Fluent NHibernate pour effectuer des opérations CRUD.

Commencer

Pour commencer à utiliser Fluent NHibernate, procédez comme suit:

  1. Ouvrez l'IDE de Visual Studio 2015
  2. Cliquez sur Fichier -> Nouveau -> Projet
  3. Créez un nouveau projet - par souci de simplicité, créez une application Windows
  4. Spécifiez un nom pour le projet
  5. Cliquez sur OK pour enregistrer le projet

Maintenant qu'un projet a été créé dans Visual Studio, vous pouvez installer Fluent NHibernate pour l'utiliser dans votre application. Si NuGet est installé, l'option la plus simple consiste à installer Fluent NHibernate via le gestionnaire de packages NuGet. Pour ce faire, sélectionnez le projet dans la fenêtre Explorateur de solutions, cliquez avec le bouton droit de la souris et sélectionnez l'option «Gérer les packages NuGet…» pour installer le framework Fluent NHibernate à partir de NuGet.

Travailler avec Fluent NHibernate

Pour travailler avec Fluent NHibernate, vous devez d'abord créer une classe de modèle. Considérez le tableau de base de données suivant.

CREATE TABLE [dbo].[Product]

(

   [Id] INT NOT NULL PRIMARY KEY,

   [Name] VARCHAR(50) NULL,

   [Description] VARCHAR(50) NULL

)

Voici la classe de modèle correspondante.

public class Product

   {

       public virtual int Id { get; set; }

       public virtual string Name { get; set; }

       public virtual string Description { get; set; }

   }

Maintenant que la table de base de données et la classe de modèle correspondante sont prêtes, l'étape suivante consiste à créer le mappage nécessaire. Pour mapper une entité dans Fluent NHibernate, vous devez avoir une classe de mappage correspondante. Ces classes de mappage doivent dériver de ClassMap où T représente l'entité que vous utilisez. Fluent NHibernate utilise des classes C # fortement typées pour mapper les propriétés des classes de modèle aux champs correspondants des tables de la base de données.

Voici la classe de mappage nommée ProductMap.

public class ProductMap : ClassMap

   {

       public ProductMap()

       {

           Id(x => x.Id);

           Map(x => x.Name);

           Map(x => x.Description);

           Table("Product");

       }

   }

L'étape suivante consiste à créer une classe d'assistance pour se connecter à notre base de données. Voici à quoi ressemblerait cette 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();

       }

   }

Notez l'appel à sessionFactory.OpenSession () dans la dernière instruction - cet appel crée en fait une session de communication avec la base de données sous-jacente, c'est-à-dire qu'il ouvre une connexion à la base de données utilisée. Vous pouvez maintenant appeler la méthode statique FluentNHibernateHelper.OpenSession () pour ouvrir une connexion à la base de données. L'extrait de code suivant illustre comment vous pouvez tirer parti de la classe d'assistance créée précédemment pour ajouter un enregistrement Product à la table de base de données Product.

static void Main(string[] args)

       {

           using (var session = FluentNHibernateHelper.OpenSession())

           {

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

               session.SaveOrUpdate(product);

           }

       }

L'extrait de code suivant montre comment vous pouvez interroger les données de la base de données à l'aide de notre classe d'assistance Fluent NHibernate.

using (ISession session = FluentNHibernateHelper.OpenSession())

           {

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

               //Usual code

           }

Pour travailler avec les exemples de code donnés dans cet article, vous devez vous assurer que les espaces de noms suivants ont été ajoutés à votre classe.

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

Vous pouvez en savoir plus sur l'utilisation de Fluent NHibernate depuis GitHub.