NHibernate - Hibernation fluide
Dans ce chapitre, nous couvrirons NHibernate couramment. Fluent NHibernate est une autre façon de mapper ou vous pouvez dire que c'est une alternative aux fichiers de mappage XML standard de NHibernate. Au lieu d'écrire du XML(.hbm.xml files)documents. Avec l'aide de Fluent NHibernate, vous pouvez écrire des mappages dans du code C # fortement typé.
Dans Fluent NHibernate, les mappages sont compilés avec le reste de votre application.
Vous pouvez facilement modifier vos mappages tout comme le code de votre application et le compilateur échouera sur toutes les fautes de frappe.
Il dispose d'un système de configuration conventionnel, dans lequel vous pouvez spécifier des modèles pour remplacer les conventions de dénomination et bien d'autres choses.
Vous pouvez également définir comment les choses doivent être nommées une fois, puis Fluent NHibernate s'occupe du reste.
Jetons un coup d'œil à un exemple simple en créant un nouveau projet de console. Dans ce chapitre, nous utiliserons une base de données simple dans laquelle nous avons une simple table Customer comme le montre l'image suivante.
![](https://assets.edu.lat/nhibernate/images/simple_customer_table.jpg)
Installez Fluent NHibernate
La première étape consiste à démarrer Fluent NHibernate est d'installer le package Fluent NHibernate. Alors ouvrez leNuGet Package Manager Console et entrez la commande suivante.
PM> install-package FluentNHibernate
Une fois qu'il est installé avec succès, vous verrez le message suivant.
![](https://assets.edu.lat/nhibernate/images/installed_successfully.jpg)
Ajoutons une classe de modèle simple de Customer et le programme suivant montre l'implémentation de la classe Customer.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FluentNHibernateDemo {
class Customer {
public virtual int Id { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
}
}
Maintenant, nous devons créer des mappages en utilisant NHibernate fluide, alors ajoutez une classe supplémentaire CustomerMapdans votre projet. Voici l'implémentation de la classe CustomerMap.
using FluentNHibernate.Mapping;
using System;
using System.Collections.Generic;
using System.Linq; using System.Text;
using System.Threading.Tasks;
namespace FluentNHibernateDemo {
class CustomerMap : ClassMap<Customer> {
public CustomerMap() {
Id(x => x.Id);
Map(x => x.FirstName);
Map(x => x.LastName);
Table("Customer");
}
}
}
Ajoutons une autre classe NHibernateHelper dans lequel nous définirons différents paramètres de configuration.
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
using NHibernate.Tool.hbm2ddl;
namespace FluentNHibernateDemo {
public class NHibernateHelper {
private static ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory {
get {
if (_sessionFactory == null)
InitializeSessionFactory(); return _sessionFactory;
}
}
private static void InitializeSessionFactory() {
_sessionFactory = Fluently.Configure()
String Data Source = asia13797\\sqlexpress;
String Initial Catalog = NHibernateDemoDB;
String Integrated Security = True;
String Connect Timeout = 15;
String Encrypt = False;
String TrustServerCertificate = False;
String ApplicationIntent = ReadWrite;
String MultiSubnetFailover = False;
.Database(MsSqlConfiguration.MsSql2008 .ConnectionString(
@"Data Source + Initial Catalog + Integrated Security + Connect Timeout
+ Encrypt + TrustServerCertificate + ApplicationIntent +
MultiSubnetFailover") .ShowSql() )
.Mappings(m => m.FluentMappings
.AddFromAssemblyOf<Program>())
.ExposeConfiguration(cfg => new SchemaExport(cfg)
.Create(true, true))
.BuildSessionFactory();
}
public static ISession OpenSession() {
return SessionFactory.OpenSession();
}
}
}
Passons maintenant au Program.cs fichier dans lequel nous allons démarrer une session, puis créer un nouveau client et enregistrer ce client dans la base de données comme indiqué ci-dessous.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FluentNHibernateDemo {
class Program {
static void Main(string[] args) {
using (var session = NHibernateHelper.OpenSession()) {
using (var transaction = session.BeginTransaction()) {
var customer = new Customer {
FirstName = "Allan",
LastName = "Bomer"
};
session.Save(customer);
transaction.Commit();
Console.WriteLine("Customer Created: " + customer.FirstName + "\t" +
customer.LastName);
}
Console.ReadKey();
}
}
}
}
Exécutons votre application et vous verrez la sortie suivante.
if exists (select * from dbo.sysobjects where id = object_id(N'Customer') and
OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table Customer
create table Customer (
Id INT IDENTITY NOT NULL,
FirstName NVARCHAR(255) null,
LastName NVARCHAR(255) null,
primary key (Id)
)
NHibernate: INSERT INTO Customer (FirstName, LastName) VALUES (@p0, @p1);
select SCOPE_IDENTITY();@p0 = 'Allan' [Type: String (4000)],
@p1 = 'Bomer' [Type: String (4000)]
Customer Created: Allan Bomer
Comme vous pouvez le voir, le nouveau client est créé. Pour voir l'enregistrement du client, allons à la base de données et voyons les données de vue et vous verrez qu'un client est ajouté.
![](https://assets.edu.lat/nhibernate/images/customer_record.jpg)