AIDE .NET

NHibernate C# (Comment ça marche pour les développeurs)

Publié juin 6, 2024
Partager:

NHibernate C#(Comment ça marche pour les développeurs) : Figure 1 - Page d'accueil de NHibernate C#

NHibernate est un puissant outil de mappage objet-relationnel (Object Relational Mapping)(ORM) conçu pour être utilisé avec le Framework .NET. Il offre aux développeurs un moyen efficace de combler le fossé entre le monde orienté objet des applications .NET et le monde relationnel des bases de données. En utilisant NHibernate, vous pouvez réduire de manière significative la quantité de code standard nécessaire à la mise en œuvre des couches d'accès aux données, ce qui rend vos applications .NET plus propres et plus faciles à maintenir.

Le rôle de l'ORM dans la simplification des interactions avec les bases de données

Les frameworks ORM comme NHibernate simplifient les interactions avec les bases de données relationnelles en permettant aux développeurs de travailler avec des données en termes d'objets et de leurs propriétés plutôt qu'en termes d'instructions SQL. Cette abstraction permet aux développeurs de se concentrer davantage sur la logique commerciale de leurs applications et moins sur les commandes SQL sous-jacentes et le schéma de la base de données. Par exemple, NHibernate s'occupe de la génération et de l'exécution de SQL, ce qui permet d'effectuer des opérations telles que des insertions, des suppressions et des mises à jour avec de simples conversions et manipulations d'objets.

Mise en place de NHibernate dans un projet .NET

Pour commencer à utiliser NHibernate dans votre projet .NET, la première étape consiste à installer le paquetage NHibernate. Cela peut se faire facilement via le gestionnaire de paquets NuGet de Visual Studio en utilisant la commande suivante :

Install-Package IronPdf

NHibernate C#(Comment ça marche pour les développeurs) : Figure 2 - Ouvrez une console de ligne de commande et entrez la commande ci-dessus pour installer NHibernate

Configuration de NHibernate avec un fichier de configuration XML

Une fois NHibernate installé, l'étape suivante consiste à le configurer. Cela implique la création d'un fichier de mappage Hibernate qui détaille les paramètres de votre serveur de base de données et les détails du mappage de vos objets avec les tables de la base de données. Le fichier XML principal, généralement nommé hibernate.cfg.xml, inclut des paramètres tels que la chaîne de connexion à la base de données, le dialecte, et d'autres paramètres spécifiques à la base de données.

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.connection_string">
      Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
    </property>
    <property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property>
    <property name="show_sql">true</property>
    <mapping resource="Employee.hbm.xml"/>
  </session-factory>
</hibernate-configuration>
XML

Comprendre les composants de base de NHibernate

L'un des composants clés de NHibernate est la Session Factory, qui est conçue à l'aide du modèle de conception factory. Ce composant crée des objets Session qui gèrent la connexion à la base de données et contiennent les opérations transactionnelles. La création de l'usine de sessions est coûteuse et n'est généralement effectuée qu'une fois par durée de vie de l'application, ce qui en fait un élément crucial pour l'optimisation des performances.

Classes et méthodes clés dans NHibernate

NHibernate s'articule autour de plusieurs classes et méthodes essentielles. Par exemple, l'interface ISession joue un rôle fondamental dans NHibernate, en facilitant la création de sessions de recherche et de manipulation de données. Des méthodes comme OpenSession aident les développeurs à démarrer des transactions, à exécuter des commandes SQL et à interroger la base de données en utilisant soit des instructions SQL, soit le HQL propre à NHibernate(Langage de requête Hibernate).

Mapper des entités vers des tables de base de données avec NHibernate

Le mappage d'entités dans NHibernate est réalisé au moyen de fichiers de mappage, généralement écrits en XML. Ces fichiers, souvent nommés d'après la classe d'entités(par exemple, Employee.hbm.xml)définissent la correspondance entre les propriétés d'une entité et les colonnes d'une table de base de données. Un fichier de mappage typique comprend le nom de la classe, le nom de la table et des détails sur chaque propriété, y compris la clé primaire, le nom de la colonne et le type de données.

Aperçu détaillé des propriétés et des attributs utilisés dans les fichiers de cartographie

Dans ces fichiers de mappage, vous pouvez spécifier divers attributs pour chaque propriété, tels que des contraintes de non nullité ou des contraintes d'unicité. NHibernate permet également d'effectuer des mappages complexes tels que des relations "un à plusieurs" et "plusieurs à un", fournissant ainsi un ensemble d'outils puissants pour représenter des structures de données relationnelles dans un cadre orienté objet.

Exécuter des commandes SQL et des transactions dans NHibernate

NHibernate simplifie le CRUD(Créer, lire, mettre à jour, supprimer) en faisant abstraction des commandes SQL sous-jacentes. Les développeurs peuvent effectuer ces opérations sans écrire de code SQL explicite, mais en utilisant les méthodes fournies par l'interface ISession. Par exemple, pour ajouter une nouvelle entité à la base de données, il suffit de créer une nouvelle instance de l'objet, de définir ses propriétés et d'utiliser la méthode Save de la ISession.

Gérer les transactions avec `ITransaction

Les transactions dans NHibernate sont gérées via l'interface ITransaction, qui assure l'intégrité et la cohérence des données. En utilisant la méthode BeginTransaction de ISession, les développeurs peuvent s'assurer que toutes les opérations sont terminées avec succès avant de livrer les données à la base de données, ou revenir en arrière si quelque chose ne va pas, ce qui permet de maintenir la stabilité de vos données.

Exemple de code complet

Cet exemple comprend l'installation des fichiers de configuration et de mappage NHibernate et montre comment effectuer des opérations de création, de lecture, de mise à jour et de suppression à l'aide de NHibernate.

using NHibernate;
using NHibernate.Cfg;
using System;
public class Employee
{
    public virtual int Id { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
}
class Program
{
    private static ISessionFactory sessionFactory;
    static void Main()
    {
        sessionFactory = new Configuration().Configure().BuildSessionFactory();
        CreateEmployee();
        ReadEmployee(1);
        UpdateEmployee(1, "UpdatedName");
        DeleteEmployee(1);
    }
    static void CreateEmployee()
    {
        using (var session = sessionFactory.OpenSession())
        using (var transaction = session.BeginTransaction())
        {
            var newEmployee = new Employee
            {
                FirstName = "Iron",
                LastName = "Software"
            };
            session.Save(newEmployee);
            transaction.Commit();
            Console.WriteLine("Employee created: " + newEmployee.Id);
        }
    }
    static void ReadEmployee(int id)
    {
        using (var session = sessionFactory.OpenSession())
        {
            var employee = session.Get<Employee>(id);
            Console.WriteLine("Read Employee: " + employee.FirstName + " " + employee.LastName);
        }
    }
    static void UpdateEmployee(int id, string newFirstName)
    {
        using (var session = sessionFactory.OpenSession())
        using (var transaction = session.BeginTransaction())
        {
            var employee = session.Get<Employee>(id);
            employee.FirstName = newFirstName;
            session.Update(employee);
            transaction.Commit();
            Console.WriteLine("Employee updated: " + employee.FirstName);
        }
    }
    static void DeleteEmployee(int id)
    {
        using (var session = sessionFactory.OpenSession())
        using (var transaction = session.BeginTransaction())
        {
            var employee = session.Get<Employee>(id);
            session.Delete(employee);
            transaction.Commit();
            Console.WriteLine("Employee deleted");
        }
    }
}
using NHibernate;
using NHibernate.Cfg;
using System;
public class Employee
{
    public virtual int Id { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
}
class Program
{
    private static ISessionFactory sessionFactory;
    static void Main()
    {
        sessionFactory = new Configuration().Configure().BuildSessionFactory();
        CreateEmployee();
        ReadEmployee(1);
        UpdateEmployee(1, "UpdatedName");
        DeleteEmployee(1);
    }
    static void CreateEmployee()
    {
        using (var session = sessionFactory.OpenSession())
        using (var transaction = session.BeginTransaction())
        {
            var newEmployee = new Employee
            {
                FirstName = "Iron",
                LastName = "Software"
            };
            session.Save(newEmployee);
            transaction.Commit();
            Console.WriteLine("Employee created: " + newEmployee.Id);
        }
    }
    static void ReadEmployee(int id)
    {
        using (var session = sessionFactory.OpenSession())
        {
            var employee = session.Get<Employee>(id);
            Console.WriteLine("Read Employee: " + employee.FirstName + " " + employee.LastName);
        }
    }
    static void UpdateEmployee(int id, string newFirstName)
    {
        using (var session = sessionFactory.OpenSession())
        using (var transaction = session.BeginTransaction())
        {
            var employee = session.Get<Employee>(id);
            employee.FirstName = newFirstName;
            session.Update(employee);
            transaction.Commit();
            Console.WriteLine("Employee updated: " + employee.FirstName);
        }
    }
    static void DeleteEmployee(int id)
    {
        using (var session = sessionFactory.OpenSession())
        using (var transaction = session.BeginTransaction())
        {
            var employee = session.Get<Employee>(id);
            session.Delete(employee);
            transaction.Commit();
            Console.WriteLine("Employee deleted");
        }
    }
}
Imports NHibernate
Imports NHibernate.Cfg
Imports System
Public Class Employee
	Public Overridable Property Id() As Integer
	Public Overridable Property FirstName() As String
	Public Overridable Property LastName() As String
End Class
Friend Class Program
	Private Shared sessionFactory As ISessionFactory
	Shared Sub Main()
		sessionFactory = (New Configuration()).Configure().BuildSessionFactory()
		CreateEmployee()
		ReadEmployee(1)
		UpdateEmployee(1, "UpdatedName")
		DeleteEmployee(1)
	End Sub
	Private Shared Sub CreateEmployee()
		Using session = sessionFactory.OpenSession()
		Using transaction = session.BeginTransaction()
			Dim newEmployee = New Employee With {
				.FirstName = "Iron",
				.LastName = "Software"
			}
			session.Save(newEmployee)
			transaction.Commit()
			Console.WriteLine("Employee created: " & newEmployee.Id)
		End Using
		End Using
	End Sub
	Private Shared Sub ReadEmployee(ByVal id As Integer)
		Using session = sessionFactory.OpenSession()
			Dim employee = session.Get(Of Employee)(id)
			Console.WriteLine("Read Employee: " & employee.FirstName & " " & employee.LastName)
		End Using
	End Sub
	Private Shared Sub UpdateEmployee(ByVal id As Integer, ByVal newFirstName As String)
		Using session = sessionFactory.OpenSession()
		Using transaction = session.BeginTransaction()
			Dim employee = session.Get(Of Employee)(id)
			employee.FirstName = newFirstName
			session.Update(employee)
			transaction.Commit()
			Console.WriteLine("Employee updated: " & employee.FirstName)
		End Using
		End Using
	End Sub
	Private Shared Sub DeleteEmployee(ByVal id As Integer)
		Using session = sessionFactory.OpenSession()
		Using transaction = session.BeginTransaction()
			Dim employee = session.Get(Of Employee)(id)
			session.Delete(employee)
			transaction.Commit()
			Console.WriteLine("Employee deleted")
		End Using
		End Using
	End Sub
End Class
VB   C#

Portabilité des bases de données et caractéristiques d'interopérabilité

NHibernate est conçu pour assurer la portabilité des bases de données. Grâce à la configuration de son dialecte, NHibernate peut s'adapter à la plupart des bases de données SQL avec un minimum de changements dans la base de code. Cela signifie que vous pouvez passer d'un serveur SQL à MySQL ou Oracle sans avoir à réécrire votre couche d'accès aux données.

Adapter NHibernate à divers systèmes de base de données comme SQL Server

Les fichiers de configuration XML de NHibernate permettent aux développeurs de spécifier le dialecte SQL spécifique à leur système de base de données. Cela fait de NHibernate une solution flexible qui peut être facilement adaptée pour fonctionner avec pratiquement n'importe quelle base de données relationnelle qui supporte SQL, garantissant que votre application est portable à travers différents systèmes de base de données.

Utilisation de NHibernate avec IronPDF

NHibernate C#(Comment ça marche pour les développeurs) : Figure 3 - Page d'accueil d'IronPDF

Intégration de NHibernate avecIronPDF est une combinaison puissante qui peut améliorer vos applications .NET. Il vous permet de gérer les opérations de base de données avec NHibernate tout en tirant parti d'IronPDF pourgénérer des documents PDF de vos données. Imaginez un scénario dans lequel votre application doit fournir des documents spécifiques à l'utilisateur, tels que des rapports d'employés, qui doivent être générés et téléchargés au format PDF. NHibernate C# peut gérer efficacement les processus de récupération des données de votre base de données, tandis qu'IronPDF peut convertir ces données en fichiers PDF bien formatés.

Installer IronPDF

Tout d'abord, assurez-vous qu'IronPDF est ajouté à votre projet. Vous pouvez l'inclure via le gestionnaire de paquets NuGet en installant le paquet IronPDF.

Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
VB   C#

NHibernate C#(Comment ça marche pour les développeurs) : Figure 4 - Installation d'IronPDF via le gestionnaire de paquets NuGet

Exemple de code

Voyons plus en détail comment mettre cela en œuvre dans votre application. Après avoir configuré NHibernate et récupéré les données nécessaires de la base de données, telles que les informations sur les employés, vous préparerez un modèle HTML qui représente la manière dont le document PDF doit apparaître. Ce modèle HTML peut être rempli dynamiquement avec des données obtenues à partir de NHibernate. Par exemple, si vous générez un rapport pour un employé, le modèle comprendra des espaces réservés pour le nom de l'employé, son numéro d'identification et d'autres détails pertinents.

Voici un exemple de code détaillé qui montre comment récupérer des données à l'aide de NHibernate et les convertir en PDF à l'aide d'IronPDF :

using IronPdf;
using NHibernate;
static void CreateEmployeeReport(int employeeId)
{
    // Open a session to interact with the database
    using (var session = OpenSession())
    {
        // Retrieve the employee object based on the provided ID
        var employee = session.Get<Employee>(employeeId);
        // Create an instance of the HtmlToPdf class from IronPDF
        var renderer = new ChromePdfRenderer();
        // Create the HTML content for the PDF, embedding employee data into the HTML
        var htmlTemplate = $@"
            <html>
            <head>
                <title>Employee Report</title>
            </head>
            <body>
                <h1>Employee Details</h1>
                <p>Name: {employee.FirstName} {employee.LastName}</p>
                <p>ID: {employee.ID}</p>
            </body>
            </html>";
        // Render the HTML string as a PDF document
        var pdf = renderer.RenderHtmlAsPdf(htmlTemplate);
        // Save the generated PDF to a file
        pdf.SaveAs("EmployeeReport.pdf");
    }
}
using IronPdf;
using NHibernate;
static void CreateEmployeeReport(int employeeId)
{
    // Open a session to interact with the database
    using (var session = OpenSession())
    {
        // Retrieve the employee object based on the provided ID
        var employee = session.Get<Employee>(employeeId);
        // Create an instance of the HtmlToPdf class from IronPDF
        var renderer = new ChromePdfRenderer();
        // Create the HTML content for the PDF, embedding employee data into the HTML
        var htmlTemplate = $@"
            <html>
            <head>
                <title>Employee Report</title>
            </head>
            <body>
                <h1>Employee Details</h1>
                <p>Name: {employee.FirstName} {employee.LastName}</p>
                <p>ID: {employee.ID}</p>
            </body>
            </html>";
        // Render the HTML string as a PDF document
        var pdf = renderer.RenderHtmlAsPdf(htmlTemplate);
        // Save the generated PDF to a file
        pdf.SaveAs("EmployeeReport.pdf");
    }
}
Imports IronPdf
Imports NHibernate
Shared Sub CreateEmployeeReport(ByVal employeeId As Integer)
	' Open a session to interact with the database
	Using session = OpenSession()
		' Retrieve the employee object based on the provided ID
		Dim employee = session.Get(Of Employee)(employeeId)
		' Create an instance of the HtmlToPdf class from IronPDF
		Dim renderer = New ChromePdfRenderer()
		' Create the HTML content for the PDF, embedding employee data into the HTML
		Dim htmlTemplate = $"
            <html>
            <head>
                <title>Employee Report</title>
            </head>
            <body>
                <h1>Employee Details</h1>
                <p>Name: {employee.FirstName} {employee.LastName}</p>
                <p>ID: {employee.ID}</p>
            </body>
            </html>"
		' Render the HTML string as a PDF document
		Dim pdf = renderer.RenderHtmlAsPdf(htmlTemplate)
		' Save the generated PDF to a file
		pdf.SaveAs("EmployeeReport.pdf")
	End Using
End Sub
VB   C#

NHibernate C#(Comment ça marche pour les développeurs) : Figure 5 - Exemple de sortie du code ci-dessus

Dans ce code, OpenSession() est une méthode qui initialise une session NHibernate, utilisée pour récupérer les données des employés. La classe ChromePdfRenderer d'IronPDF prend alors le modèle HTML rempli avec les données récupérées et le rend au format PDF. Ce PDF est enregistré localement, mais il pourrait également être transmis directement à un utilisateur par le biais d'une interface web.

Conclusion

NHibernate C#(Comment ça marche pour les développeurs) : Figure 6 - Page de licence IronPDF

Dans ce tutoriel, nous avons exploré comment NHibernate simplifie les opérations de base de données dans les applications .NET et comment son intégration avec IronPDF améliore la fonctionnalité en permettant la génération de documents PDF dynamiques. NHibernate fournit de solides outils de gestion des données, tandis qu'IronPDF offre un moyen pratique de créer des PDF de qualité professionnelle à partir de modèles HTML remplis de données.

IronPDF est disponible pour uneessai gratuitles licences sont proposées à partir de 749 $, ce qui constitue une solution économique pour l'intégration d'une puissante génération de PDF dans vos applications. Ensemble, ces outils offrent une solution complète pour la gestion des données et la production de documents, idéale pour les entreprises comme pour les projets de moindre envergure.

< PRÉCÉDENT
Ocelot .NET (Comment ça marche pour les développeurs)
SUIVANT >
Exemple de Rebus .NET Core (Comment ça marche pour les développeurs)