Zum Fußzeileninhalt springen
.NET HILFE

NHibernate C# (Funktionsweise für Entwickler)

NHibernate C# (How It Works For Developers): Abbildung 1 - Startseite von NHibernate C#

NHibernate ist ein leistungsstarkes Object Relational Mapping (ORM) Framework, das für die Verwendung mit dem .NET-Framework entwickelt wurde. Es bietet Entwicklern eine effiziente Möglichkeit, die Lücke zwischen der objektorientierten Welt der .NET-Anwendungen und der relationalen Welt von Datenbanken zu schließen. Durch die Verwendung von NHibernate können Sie die Menge an Boilerplate-Code, die für die Implementierung von Datenzugriffsschichten erforderlich ist, erheblich reduzieren, wodurch Ihre .NET-Anwendungen sauberer und wartungsfreundlicher werden.

Die Rolle von ORM bei der Vereinfachung von Datenbankinteraktionen

ORM-Frameworks wie NHibernate vereinfachen die Interaktionen mit relationalen Datenbanken, indem sie es Entwicklern ermöglichen, mit Daten in Form von Objekten und deren Eigenschaften anstelle von SQL-Anweisungen zu arbeiten. Diese Abstraktion hilft Entwicklern, sich mehr auf die Geschäftslogik ihrer Anwendungen und weniger auf die zugrunde liegenden SQL-Befehle und das Datenbankschema zu konzentrieren. Zum Beispiel übernimmt NHibernate die gesamte SQL-Generierung und -Ausführung, sodass Operationen wie Einfügungen, Löschungen und Aktualisierungen durch einfache Objektumwandlungen und Objektmanipulationen durchgeführt werden können.

Einrichten von NHibernate in einem .NET-Projekt

Um mit NHibernate in Ihrem .NET-Projekt zu beginnen, ist der erste Schritt die Installation des NHibernate-Pakets. Dies kann leicht über den NuGet-Paketmanager von Visual Studio mit dem folgenden Befehl erledigt werden:

Install-Package NHibernate

NHibernate C# (How It Works For Developers): Abbildung 2 - Öffnen Sie eine Befehlszeilenschnittstelle und geben Sie den oben genannten Befehl ein, um NHibernate zu installieren

Konfiguration von NHibernate mit einer XML-Konfigurationsdatei

Sobald NHibernate installiert ist, besteht der nächste Schritt darin, es zu konfigurieren. Dies beinhaltet das Erstellen einer Hibernate-Mapping-Datei, die die Einstellungen Ihres Datenbankservers und die Mapping-Details Ihrer Objekte zu den Datenbanktabellen beschreibt. Die Haupt-XML-Datei, normalerweise hibernate.cfg.xml genannt, enthält Einstellungen wie die Datenbankverbindungszeichenfolge, den Dialekt und andere datenbankspezifische Einstellungen.

<?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 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

Verstehen der Kernkomponenten von NHibernate

Eine der Schlüsselkomponenten in NHibernate ist die Session Factory, die nach dem Factory-Designmuster entworfen wurde. Diese Komponente erstellt Sitzungsobjekte, die die Verbindung zur Datenbank verwalten und die Transaktionsoperationen halten. Die Session Factory ist kostspielig zu erstellen, daher wird sie in der Regel nur einmal pro Anwendungslebensdauer erstellt, was sie zu einem entscheidenden Element für Leistungsoptimierung macht.

Schlüsselklassen und -methoden in NHibernate

NHibernate dreht sich um mehrere wesentliche Klassen und Methoden. Zum Beispiel spielt das ISession-Interface eine grundlegende Rolle in NHibernate, indem es die Erstellung von Datenabfrage- und Manipulationssitzungen erleichtert. Methoden wie OpenSession helfen Entwicklern, Transaktionen zu starten, SQL-Befehle auszuführen und die Datenbank entweder mit SQL-Anweisungen oder NHibernates eigenem HQL (Hibernate Query Language) abzufragen.

Mapping von Entitäten auf Datenbanktabellen mit NHibernate

In NHibernate erfolgt die Entity-Zuordnung durch Mapping-Dateien, die normalerweise in XML geschrieben werden. Diese Dateien, oft nach der Entity-Klasse benannt (z.B. Employee.hbm.xml), definieren, wie die Eigenschaften einer Entity zu den Spalten einer Datenbanktabelle zugeordnet werden. Eine typische Mapping-Datei enthält den Klassennamen, den Tabellennamen und Details zu jeder Eigenschaft, einschließlich des Primärschlüssels, des Spaltennamens und des Datentyps.

Detaillierter Blick auf die in Mapping-Dateien verwendeten Eigenschaften und Attribute

In diesen Mapping-Dateien können Sie verschiedene Attribute für jede Eigenschaft angeben, wie zum Beispiel Nicht-Null-Beschränkungen oder eindeutige Beschränkungen. NHibernate erlaubt auch komplexe Zuordnungen wie Eins-zu-Viele- und Viele-zu-Eins-Beziehungen und bietet ein leistungsstarkes Werkzeugset zur Darstellung relationaler Datenstrukturen innerhalb eines objektorientierten Frameworks.

Ausführen von SQL-Befehlen und -Transaktionen in NHibernate

NHibernate vereinfacht CRUD-Operationen (Create, Read, Update, Delete), indem es die zugrunde liegenden SQL-Befehle abstrahiert. Entwickler können diese Operationen ausführen, ohne expliziten SQL-Code zu schreiben, sondern durch die Verwendung von Methoden, die durch das ISession-Interface bereitgestellt werden. Zum Beispiel, um eine neue Entität zur Datenbank hinzuzufügen, erstellen Sie einfach eine neue Instanz des Objekts, setzen dessen Eigenschaften und verwenden die Save-Methode des ISession.

Verwaltung von Transaktionen mit ITransaction

Transaktionen in NHibernate werden über das ITransaction-Interface verwaltet, das die Datenintegrität und Konsistenz sicherstellt. Mit der BeginTransaction-Methode von ISession können Entwickler sicherstellen, dass alle Operationen erfolgreich abgeschlossen sind, bevor die Daten in die Datenbank übertragen werden, oder zurückrollen, wenn etwas schiefgeht, um die Stabilität Ihrer Daten zu gewährleisten.

Komplettes Code-Beispiel

Dieses Beispiel umfasst die Konfiguration der NHibernate-Konfiguration und der Mapping-Dateien und zeigt, wie man Create-, Read-, Update- und Delete-Operationen mit NHibernate durchführt.

using NHibernate;
using NHibernate.Cfg;
using System;

// Define the Employee class with virtual properties
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()
    {
        // Initialize the SessionFactory using NHibernate configuration
        sessionFactory = new Configuration().Configure().BuildSessionFactory();

        // Perform database operations
        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); // Save the new Employee object to the database
            transaction.Commit(); // Commit the transaction to finalize the insertion
            Console.WriteLine("Employee created: " + newEmployee.Id);
        }
    }

    static void ReadEmployee(int id)
    {
        using (var session = sessionFactory.OpenSession())
        {
            // Retrieve the Employee object by its Id
            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())
        {
            // Get the Employee object by its Id
            var employee = session.Get<Employee>(id);
            employee.FirstName = newFirstName; // Update the employee's first name
            session.Update(employee); // Update the Employee object in the database
            transaction.Commit(); // Commit the transaction to save changes
            Console.WriteLine("Employee updated: " + employee.FirstName);
        }
    }

    static void DeleteEmployee(int id)
    {
        using (var session = sessionFactory.OpenSession())
        using (var transaction = session.BeginTransaction())
        {
            // Retrieve the Employee object to be deleted
            var employee = session.Get<Employee>(id);
            session.Delete(employee); // Delete the Employee from the database
            transaction.Commit(); // Commit the transaction to finalize the deletion
            Console.WriteLine("Employee deleted");
        }
    }
}
using NHibernate;
using NHibernate.Cfg;
using System;

// Define the Employee class with virtual properties
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()
    {
        // Initialize the SessionFactory using NHibernate configuration
        sessionFactory = new Configuration().Configure().BuildSessionFactory();

        // Perform database operations
        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); // Save the new Employee object to the database
            transaction.Commit(); // Commit the transaction to finalize the insertion
            Console.WriteLine("Employee created: " + newEmployee.Id);
        }
    }

    static void ReadEmployee(int id)
    {
        using (var session = sessionFactory.OpenSession())
        {
            // Retrieve the Employee object by its Id
            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())
        {
            // Get the Employee object by its Id
            var employee = session.Get<Employee>(id);
            employee.FirstName = newFirstName; // Update the employee's first name
            session.Update(employee); // Update the Employee object in the database
            transaction.Commit(); // Commit the transaction to save changes
            Console.WriteLine("Employee updated: " + employee.FirstName);
        }
    }

    static void DeleteEmployee(int id)
    {
        using (var session = sessionFactory.OpenSession())
        using (var transaction = session.BeginTransaction())
        {
            // Retrieve the Employee object to be deleted
            var employee = session.Get<Employee>(id);
            session.Delete(employee); // Delete the Employee from the database
            transaction.Commit(); // Commit the transaction to finalize the deletion
            Console.WriteLine("Employee deleted");
        }
    }
}
$vbLabelText   $csharpLabel

Merkmale der Datenbank-Portabilität und Interoperabilität

NHibernate ist mit Datenbankportabilität konzipiert. Dank seiner Dialektkonfiguration kann NHibernate sich mit minimalen Änderungen des Code-Designs an die meisten SQL-Datenbanken anpassen. Das bedeutet, dass Sie von einem SQL-Server zu MySQL oder Oracle wechseln können, ohne Ihre Datenzugriffsschicht neu schreiben zu müssen.

Anpassung von NHibernate für verschiedene Datenbanksysteme wie SQL Server

Die XML-Konfigurationsdateien in NHibernate erlauben es Entwicklern, den SQL-Dialekt anzugeben, der spezifisch für ihr Datenbanksystem ist. Das macht NHibernate zu einer flexiblen Lösung, die leicht angepasst werden kann, um mit praktisch jeder relationalen Datenbank zu arbeiten, die SQL unterstützt, und stellt sicher, dass Ihre Anwendung auf verschiedenen Datenbanksystemen portabel ist.

NHibernate mit IronPDF verwenden

NHibernate C# (How It Works For Developers): Abbildung 3 - Startseite von IronPDF

Die Integration von NHibernate mit IronPDF ist eine leistungsstarke Kombination, die Ihre .NET-Anwendungen verbessern kann. Es ermöglicht Ihnen, Datenbankoperationen mit NHibernate zu verwalten, während Sie IronPDF verwenden, um PDF-Dokumente zu generieren aus Ihren Daten. Betrachten Sie ein Szenario, in dem Ihre Anwendung benutzerspezifische Dokumente bereitstellen muss, wie z.B. Mitarbeiterberichte, die im PDF-Format generiert und heruntergeladen werden müssen. NHibernate kann effizient die Datenabrufprozesse aus Ihrer Datenbank verwalten, während IronPDF in der Lage ist, diese Daten in gut formatierte PDF-Dateien umzuwandeln.

IronPDF installieren

Stellen Sie sicher, dass IronPDF Ihrem Projekt hinzugefügt ist. Sie können es über den NuGet-Paketmanager einbeziehen, indem Sie das IronPDF-Paket installieren.

Install-Package IronPdf

NHibernate C# (How It Works For Developers): Abbildung 4 - Installieren Sie IronPDF über den NuGet-Paketmanager

Codebeispiel

Lassen Sie uns tiefer darauf eingehen, wie Sie dies in Ihrer Anwendung umsetzen können. Nachdem Sie NHibernate eingerichtet haben und die benötigten Daten aus der Datenbank, wie z.B. Mitarbeiterdetails, abgerufen haben, bereiten Sie eine HTML-Vorlage vor, die darstellt, wie das PDF-Dokument aussehen soll. Diese HTML-Vorlage kann dynamisch mit den von NHibernate abgerufenen Daten gefüllt werden. Zum Beispiel, wenn Sie einen Bericht für einen Mitarbeiter generieren, würde die Vorlage Platzhalter für den Namen, die ID und andere relevante Details des Mitarbeiters enthalten.

Hier ist ein detailliertes Codebeispiel, das zeigt, wie man Daten mit NHibernate abruft und mit IronPDF in ein PDF umwandelt:

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 ChromePdfRenderer 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 ChromePdfRenderer 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");
    }
}
$vbLabelText   $csharpLabel

NHibernate C# (How It Works For Developers): Abbildung 5 - Beispielausgabe aus dem obigen Code

In diesem Code ist OpenSession() eine Methode, die eine NHibernate-Sitzung initialisiert, die verwendet wird, um die Mitarbeiterdaten abzurufen. Die ChromePdfRenderer-Klasse von IronPDF übernimmt dann die mit den abgerufenen Daten gefüllte HTML-Vorlage und rendert sie als PDF. Dieses PDF wird lokal gespeichert, könnte aber auch direkt über eine Webschnittstelle an einen Benutzer gestreamt werden.

Abschluss

NHibernate C# (How It Works For Developers): Abbildung 6 - IronPDF-Lizenzseite

In diesem Tutorial haben wir untersucht, wie NHibernate Datenbankoperationen in .NET-Anwendungen vereinfacht und wie seine Integration mit IronPDF die Funktionalität verbessert, indem sie die Erstellung dynamischer PDF-Dokumente ermöglicht. NHibernate bietet robuste Datenmanagement-Tools, während IronPDF eine bequeme Möglichkeit bietet, professionelle PDFs aus mit Daten gefüllten HTML-Vorlagen zu erstellen.

IronPDF ist für eine kostenlose Testversion verfügbar, und Lizenzen beginnen bei einer kostengünstigen Lösung für die Integration leistungsstarker PDF-Generierung in Ihre Anwendungen. Zusammen bieten diese Tools eine umfassende Lösung für Datenmanagement und Dokumenterstellung, ideal für sowohl unternehmensweite als auch kleinere Projekte.

Häufig gestellte Fragen

Wie kann ich NHibernate mit einer PDF-Generierungsbibliothek in C# integrieren?

NHibernate kann mit IronPDF integriert werden, indem NHibernate zur Handhabung von Datenbankoperationen und zum Abrufen von Daten verwendet wird, die IronPDF dann in PDF-Dokumente umwandeln kann. Dies ermöglicht die Erstellung dynamischer PDFs basierend auf benutzerspezifischen Daten.

Was ist der Zweck der Session Factory in NHibernate?

In NHibernate ist die Session Factory eine wichtige Komponente, die Session-Objekte erstellt, um Datenbankverbindungen zu verwalten und Transaktionsoperationen durchzuführen. Sie optimiert die Leistung, da ihre Erstellung kostspielig ist und typischerweise einmal pro Anwendungslebensdauer instanziiert wird.

Können Sie erklären, wie CRUD-Operationen in NHibernate durchgeführt werden?

CRUD-Operationen in NHibernate werden über das `ISession`-Interface abstrahiert, das Methoden wie Save, Update und Delete bereitstellt. Dies ermöglicht es Entwicklern, diese Operationen durchzuführen, ohne direkt SQL-Befehle schreiben zu müssen.

Was sind die Vorteile der Verwendung von NHibernate für .NET-Entwickler?

NHibernate bietet .NET-Entwicklern den Vorteil, den Aufwand für Boilerplate-Code in Datenzugriffsschichten zu reduzieren, was die Wartbarkeit von Anwendungen verbessert. Es abstrahiert Datenbankinteraktionen, sodass sich Entwickler mehr auf die Geschäftslogik konzentrieren können.

Wie unterstützt NHibernate die Datenbank-Portabilität?

NHibernate unterstützt die Datenbank-Portabilität durch seine Dialektkonfiguration, die es ihm ermöglicht, sich an verschiedene SQL-Datenbanken anzupassen. Dies ermöglicht es Entwicklern, von einem Datenbanksystem zu einem anderen mit minimalen Änderungen am Code zu wechseln.

Welche Rolle spielen Mapping-Dateien in NHibernate?

Mapping-Dateien in NHibernate, typischerweise XML-Dateien, definieren, wie die Eigenschaften einer Entität auf die Spalten einer Datenbanktabelle abgebildet werden. Sie umfassen wichtige Details wie Primärschlüssel, Spaltennamen und Datentypen und unterstützen komplexe Abbildungen wie Eins-zu-viele-Beziehungen.

Wie können Transaktionen in NHibernate effektiv verwaltet werden?

Transaktionen in NHibernate werden über das `ITransaction`-Interface verwaltet, das die Datenintegrität sicherstellt. Entwickler können die BeginTransaction-Methode von `ISession` verwenden, um Operationen zu handhaben, und Daten nur dann zu committen, wenn alle Operationen erfolgreich sind, oder zurückzusetzen, falls Probleme auftreten.

Wie richtet man NHibernate in einem .NET-Projekt ein?

Um NHibernate einzurichten, installieren Sie das NHibernate-Paket über Visual Studios NuGet Package Manager mit dem Befehl Install-Package NHibernate. Konfigurieren Sie es mit einer XML-Mapping-Datei wie `hibernate.cfg.xml`, um Datenbankeinstellungen und Objektabbildungen zu definieren.

Jacob Mellor, Chief Technology Officer @ Team Iron
Chief Technology Officer

Jacob Mellor ist Chief Technology Officer bei Iron Software und ein visionärer Ingenieur, der führend in der C# PDF-Technologie ist. Als ursprünglicher Entwickler der Iron Software-Kerncodebasis hat er die Produktarchitektur des Unternehmens seit seiner Gründung gestaltet und zusammen mit CEO Cameron Rimington in ein Unternehmen ...

Weiterlesen