IRONSOFTWAREHOME
AKTUALNOŚCI DLA PROGRAMISTÓW

NHibernate C# (jak to działa dla programistów)

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Jacob Mellor
Updated: 28 lipca 2025

NHibernate C# (Jak to działa dla deweloperów): Rysunek 1 - Strona główna NHibernate C#

NHibernate to potężny framework do mapowania obiektowo-relacyjnego (ORM) zaprojektowany do użytku z .NET Framework. Zapewnia programistom skuteczny sposób na wypełnienie luki między obiektowym światem aplikacji .NET a relacyjnym światem baz danych. Korzystając z NHibernate, można znacznie zmniejszyć ilość kodu szablonowego wymaganego do wdrożenia warstw dostępu do danych, dzięki czemu aplikacje .NET stają się bardziej przejrzyste i łatwiejsze w utrzymaniu.

Rola ORM w upraszczaniu interakcji z bazami danych

Frameworki ORM, takie jak NHibernate, upraszczają interakcje z relacyjnymi bazami danych, umożliwiając programistom pracę z danymi w postaci obiektów i ich właściwości, a nie za pomocą instrukcji SQL. Ta abstrakcja pomaga programistom skupić się bardziej na logice biznesowej swoich aplikacji, a mniej na podstawowych poleceniach SQL i schemacie bazy danych. Na przykład NHibernate obsługuje całe generowanie i wykonywanie kodu SQL, umożliwiając przeprowadzanie operacji, takich jak wstawianie, usuwanie i aktualizowanie, za pomocą prostej konwersji obiektów i manipulacji obiektami.

Konfiguracja NHibernate w projekcie .NET

Aby rozpocząć pracę z NHibernate w projekcie .NET, pierwszym krokiem jest zainstalowanie pakietu NHibernate. Można to łatwo zrobić za pomocą menedżera pakietów NuGet w Visual Studio, używając następującego polecenia:

PM > Install-Package NHibernate

NHibernate C# (Jak to działa dla deweloperów): Rysunek 2 - Otwórz konsolę wiersza poleceń i wprowadź polecenie z powyższego tekstu, aby zainstalować NHibernate

Konfiguracja NHibernate za pomocą pliku konfiguracyjnego XML

Po zainstalowaniu NHibernate następnym krokiem jest jego konfiguracja. Wymaga to utworzenia pliku mapowania Hibernate, który zawiera szczegółowe ustawienia serwera bazy danych oraz szczegóły mapowania obiektów do tabel bazy danych. Główny plik XML, zazwyczaj noszący nazwę hibernate.cfg.xml, zawiera ustawienia takie jak łańcuch połączenia do bazy danych, dialekt i inne ustawienia specyficzne dla bazy danych.

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

Zrozumienie podstawowych komponentów NHibernate

Jednym z kluczowych komponentów NHibernate jest Session Factory, zaprojektowana z wykorzystaniem wzorca projektowego fabryki. Ten komponent tworzy obiekty Session, które zarządzają połączeniem z bazą danych i przechowują operacje transakcyjne. Utworzenie fabryki sesji jest kosztowne, więc zazwyczaj wykonuje się to tylko raz w całym cyklu życia aplikacji, co czyni ją kluczowym elementem optymalizacji wydajności.

Kluczowe klasy i metody w NHibernate

NHibernate opiera się na kilku kluczowych klasach i metodach. Na przykład, interfejs ISession odgrywa fundamentalną rolę w NHibernate, ułatwiając tworzenie sesji zapytań i manipulacji danymi. Metody takie jak OpenSession pomagają deweloperom rozpoczynać transakcje, wykonywać polecenia SQL oraz przeszukiwać bazę danych za pomocą instrukcji SQL lub własnego języka HQL (Hibernate Query Language) NHibernate.

Mapowanie encji do tabel bazy danych za pomocą NHibernate

Mapowanie encji w NHibernate odbywa się za pomocą plików mapujących, zazwyczaj napisanych w formacie XML. Pliki te, często nazwane na cześć klasy encji (np. Employee.hbm.xml), definiują sposób, w jaki właściwości encji są mapowane na kolumny tabeli bazy danych. Typowy plik mapowania zawiera nazwę klasy, nazwę tabeli oraz szczegóły dotyczące każdej właściwości, w tym klucz główny, nazwę kolumny i typ danych.

Szczegółowe omówienie właściwości i atrybutów używanych w plikach mapowania

W tych plikach mapowania można określić różne atrybuty dla każdej właściwości, takie jak ograniczenia not-null lub ograniczenia unikalności. NHibernate umożliwia również tworzenie złożonych mapowań, takich jak relacje jeden do wielu i wiele do jednego, zapewniając potężny zestaw narzędzi do reprezentowania relacyjnych struktur danych w ramach środowiska obiektowego.

Wykonywanie poleceń SQL i transakcji w NHibernate

NHibernate upraszcza operacje CRUD (tworzenie, odczyt, aktualizacja, usuwanie) poprzez abstrakcję podstawowych poleceń SQL. Deweloperzy mogą wykonywać te operacje bez pisania jawnego kodu SQL, zamiast tego używając metod dostarczonych przez interfejs ISession. Na przykład, aby dodać nową encję do bazy danych, wystarczy utworzyć nową instancję obiektu, ustawić jego właściwości i użyć metody Save interfejsu ISession.

Zarządzanie transakcjami za pomocą ITransaction

Transakcje w NHibernate są zarządzane za pomocą interfejsu ITransaction, który zapewnia integralność i spójność danych. Używając metody BeginTransaction z ISession, deweloperzy mogą zapewnić, że wszystkie operacje są pomyślnie zakończone przed zapisaniem danych do bazy danych lub wycofać zmiany, jeśli coś pójdzie nie tak, zachowując tym samym stabilność danych.

Pełny przykład kodu

Ten przykład obejmuje konfigurację plików konfiguracyjnych i mapujących NHibernate oraz pokazuje, jak wykonywać operacje tworzenia, odczytu, aktualizacji i usuwania przy użyciu NHibernate.

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");
        }
    }
}

Funkcje przenośności i interoperacyjności baz danych

NHibernate został zaprojektowany z myślą o przenośności baz danych. Dzięki konfiguracji dialektu NHibernate może dostosować się do większości baz danych SQL przy minimalnych zmianach w kodzie źródłowym. Oznacza to, że można przejść z serwera SQL na MySQL lub Oracle bez konieczności przepisywania warstwy dostępu do danych.

Dostosowanie NHibernate do różnych systemów baz danych, takich jak SQL Server

Pliki konfiguracyjne XML w NHibernate pozwalają programistom określić dialekt SQL specyficzny dla ich systemu baz danych. To sprawia, że NHibernate jest elastycznym rozwiązaniem, które można łatwo dostosować do pracy z praktycznie każdą relacyjną bazą danych obsługującą SQL, zapewniając przenośność aplikacji między różnymi systemami baz danych.

Korzystanie z NHibernate z IronPDF

NHibernate C# (Jak to działa dla deweloperów): Rysunek 3 - Strona główna IronPDF

Integracja NHibernate z IronPDF to potężne połączenie, które może wzbogacić Twoje aplikacje .NET. Pozwala to zarządzać operacjami bazodanowymi za pomocą NHibernate, jednocześnie wykorzystując IronPDF do generowania dokumentów PDF na podstawie danych. Rozważmy scenariusz, w którym aplikacja musi udostępniać dokumenty specyficzne dla użytkownika, takie jak raporty pracowników, które należy wygenerować i pobrać w formacie PDF. NHibernate może efektywnie zarządzać procesami pobierania danych z bazy danych, a IronPDF może konwertować te dane na dobrze sformatowane pliki PDF.

Zainstaluj IronPDF

Najpierw upewnij się, że IronPDF został dodany do Twojego projektu. Można go dodać za pomocą menedżera pakietów NuGet, instalując pakiet IronPDF.

PM > Install-Package IronPdf

NHibernate C# (Jak to działa dla deweloperów): Rysunek 4 - Instalacja IronPDF poprzez Menedżera Pakietów NuGet

Przykład kodu

Przyjrzyjmy się bliżej, jak wdrożyć to w Twojej aplikacji. Po skonfigurowaniu NHibernate i pobraniu niezbędnych danych z bazy danych, takich jak dane pracowników, przygotujesz szablon HTML przedstawiający wygląd dokumentu PDF. Ten szablon HTML może być dynamicznie wypełniany danymi uzyskanymi z NHibernate. Na przykład, jeśli generujesz raport dla pracownika, szablon zawierałby symbole zastępcze dla imienia i nazwiska pracownika, identyfikatora oraz innych istotnych szczegółów.

Oto szczegółowy przykład kodu, który pokazuje pobieranie danych za pomocą NHibernate i konwertowanie ich do formatu PDF za pomocą 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 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");
    }
}

NHibernate C# (Jak to działa dla deweloperów): Rysunek 5 - Przykładowy wynik z powyższego kodu

W tym kodzie OpenSession() jest metodą inicjującą sesję NHibernate, która jest używana do pobierania danych pracownika. Następnie klasa ChromePdfRenderer z IronPDF pobiera szablon HTML wypełniony pobranymi danymi i renderuje go jako PDF. Ten plik PDF jest zapisany lokalnie, ale może być również przesyłany strumieniowo bezpośrednio do użytkownika za pośrednictwem interfejsu internetowego.

Wnioski

NHibernate C# (Jak to działa dla deweloperów): Rysunek 6 - Strona licencyjna IronPDF

W tym samouczku omówiliśmy, w jaki sposób NHibernate upraszcza operacje na bazach danych w aplikacjach .NET oraz jak jego integracja z IronPDF zwiększa funkcjonalność, umożliwiając generowanie dynamicznych dokumentów PDF. NHibernate zapewnia solidne narzędzia do zarządzania danymi, a IronPDF oferuje wygodny sposób tworzenia profesjonalnych plików PDF na podstawie szablonów HTML wypełnionych danymi.

IronPDF jest dostępny w ramach bezpłatnej wersji próbnej, a ceny licencji zaczynają się od opłacalnego rozwiązania umożliwiającego integrację zaawansowanego generowania plików PDF z aplikacjami użytkownika. W połączeniu narzędzia te oferują kompleksowe rozwiązanie do zarządzania danymi i tworzenia dokumentów, idealne zarówno dla projektów na skalę Enterprise, jak i tych o mniejszym zasięgu.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczącą ponad 50 osób, obsługującą NASA, Teslę i światowe agencje rządowe.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta