Test dans un environnement réel
Test en production sans filigrane.
Fonctionne partout où vous en avez besoin.
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.
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.
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
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>
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.
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).
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.
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.
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
.
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.
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
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.
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.
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.
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
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
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.
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.
9 produits de l'API .NET pour vos documents de bureau