Was ist NHibernate und warum wird es benötigt?
NHibernate ist eine leistungsstarke und ausgereifte objektrelationale Bibliothek (ORM) für die .NET-Plattform, geschrieben in C#. Sie ist ein Port der berühmten Java-Bibliothek Hibernate. NHibernate löst das grundlegende Problem der Diskrepanz zwischen dem objektorientierten Datenmodell in Ihrer C#-Anwendung und dem relationalen Datenmodell in der Datenbank (SQL Server, PostgreSQL, MySQL, Oracle usw.).
Die Hauptaufgabe von NHibernate ist es, die Datenkonvertierung zwischen C#-Objekten (POCO – Plain Old CLR Objects) und Datenbanktabelleneinträgen zu automatisieren. Anstatt hunderte Zeilen ähnlichen SQL-Codes für CRUD-Operationen (Create, Read, Update, Delete) zu schreiben, arbeiten Sie mit Objekten, während NHibernate die Generierung und Ausführung von SQL-Abfragen übernimmt.
Warum NHibernate verwenden?
- Höhere Entwicklungsproduktivität: Sie schreiben weniger Code, insbesondere Boilerplate-Code für ADO.NET.
- Weniger Fehler: SQL-Abfragen werden automatisch generiert, was das Risiko von Syntaxfehlern und SQL-Injection (bei korrekter Verwendung) reduziert.
- Datenbankunabhängigkeit: Sie können das DBMS wechseln, indem Sie nur die Verbindungszeichenfolge und den NHibernate-Dialekt ändern, ohne die Geschäftslogik umschreiben zu müssen.
- Cache-Verwaltung: Integrierte Mechanismen für First-Level- und Second-Level-Caching beschleunigen die Anwendungsleistung erheblich.
- Lazy Loading (Verzögertes Laden): Verknüpfte Daten werden nur geladen, wenn sie tatsächlich benötigt werden, was Ressourcen spart.
- Leistungsstarke Abfragesprache: HQL (Hibernate Query Language) und LINQ to NHibernate ermöglichen typsichere Abfragen.
NHibernate Installation
NHibernate wird über NuGet, den Paketmanager für .NET, verteilt. Die Installation ist sehr einfach.
Über die Paket-Manager-Konsole (Package Manager Console):
Install-Package NHibernate
Über die .NET CLI (für .NET Core / .NET 5+ Projekte):
dotnet add package NHibernate
Zusätzliche Pakete (bei Bedarf):
- NHibernate.Caches.CoreMemoryCache – für Second-Level-Caching.
- System.Data.SqlClient oder Microsoft.Data.SqlClient – für die Arbeit mit SQL Server.
- Npgsql – für die Arbeit mit PostgreSQL.
- MySql.Data – für die Arbeit mit MySQL.
Nach der Installation müssen Sie die Konfiguration einrichten (normalerweise in app.config, web.config oder appsettings.json) oder per Fluent-Konfiguration im Code.
Schnellstart mit Codebeispiel
Betrachten wir ein einfaches Beispiel für die Arbeit mit NHibernate. Angenommen, wir haben eine Tabelle Products in einer SQL Server-Datenbank.
1. Erstellen der Entitätsklasse (Entity):
public class Product
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual decimal Price { get; set; }
}
Wichtig: Alle Eigenschaften müssen virtual sein – dies ist eine Anforderung von NHibernate für die Implementierung von Proxy-Mechanismen (Lazy Loading, Änderungsverfolgung).
2. Erstellen der Mapping-Datei (Product.hbm.xml):
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="YourAssemblyName"
namespace="YourNamespace">
<class name="Product" table="Products">
<id name="Id" column="ProductId">
<generator class="native" />
</id>
<property name="Name" column="ProductName" length="100" not-null="true" />
<p Auch in der Bibliothek
Arbeiten mit Excel in Kotlin: Bibliotheken Apache POI und Kotlin-Wrapper
ORM für Kotlin: Exposed vs Ktor vs Ktorm — Vergleich und Beispiele
Swift Package Manager für Swift: Komplettleitfaden mit Beispielen