IRONSOFTWAREHOME
開發者更新

NHibernate C#(對於開發者的運行原理)

Jacob Mellor,首席技術官 @ Team Iron
Jacob Mellor
Updated: 2025年7月28日

NHibernate C# (它如何為開發者工作):圖1 - NHibernate C# 首頁

NHibernate 是一個強大的物件關係對應 (ORM) 框架,為.NET框架設計。 它提供開發者一種高效的方法來橋接.NET應用程式的物件導向世界和資料庫的關聯世界之間的鴻溝。 通過使用NHibernate,您可以顯著減少實現資料存取層所需的樣板程式碼量,從而使您的.NET應用程式更乾淨和更易於維護。

ORM在簡化資料庫交互中的角色

像NHibernate這樣的ORM框架通過允許開發者用物件及其屬性而不是SQL語句來處理資料,來簡化與關聯資料庫的交互。 這種抽象幫助開發者更多地專注於應用程式的業務邏輯,而不是底層的SQL命令和資料庫結構。 例如,NHibernate處理所有的SQL生成和執行,允許插入、刪除和更新等操作用簡單的物件轉換和物件操作來進行。

在.NET專案中設置NHibernate

要在.NET專案中開始使用NHibernate,第一步是安裝NHibernate套件。 這可以通過使用Visual Studio的NuGet套件管理器並使用以下命令輕鬆完成:

PM > Install-Package NHibernate

NHibernate C# (它如何為開發者工作):圖2 - 開啟命令行控制台並輸入上述命令以安裝NHibernate

使用XML配置文件配置NHibernate

一旦安裝了NHibernate,下一步就是配置它。 這涉及到建立一個Hibernate映射文件,其中包含您的資料庫伺服器設置以及物件到資料庫表的映射細節。 主要的XML文件,通常命名為hibernate.cfg.xml,包含如資料庫連接字串、方言及其他資料庫特定設置等設置。

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

理解NHibernate的核心元件

NHibernate的一個關鍵元件是Session Factory,該元件使用工廠設計模式設計。 這個元件建立管理與資料庫連接和持有事務操作的Session物件。 Session Factory的建立成本高,所以通常在每個應用程式的生命週期中只建立一次,這使其成為性能優化的重要元素。

NHibernate中的關鍵類別和方法

NHibernate圍繞著幾個基本類別和方法。 例如,ISession介面在NHibernate中起著基礎作用,促進資料查詢和操作會話的建立。 像OpenSession這樣的方法幫助開發者開始交易,執行SQL命令,以及使用SQL語句或NHibernate自己的HQL(宿主查詢語言)查詢資料庫。

使用NHibernate將實體映射到資料庫表

在NHibernate中,實體映射是通過映射文件來實現的,這些文件通常用XML編寫。 這些文件,通常以實體類(例如,Employee.hbm.xml)命名,定義實體的屬性如何映射到資料表的欄位。 典型的映射文件包括類名、表名以及每個屬性的詳細資訊,包括主鍵、列名和資料型別。

詳解映射文件中使用的屬性和屬性

在這些映射文件中,您可以為每個屬性指定各種屬性,如非空約束或唯一約束。 NHibernate還允許進行一對多和多對一關係等複雜映射,為在物件導向框架中表示關聯資料結構提供了強大的工具集。

在NHibernate中執行SQL命令和事務

NHibernate通過抽象底層的SQL命令簡化了CRUD(建立、讀取、更新、刪除)操作。 開發者可以在不編寫顯式SQL程式碼的情況下執行這些操作,而是使用ISession介面提供的方法。 例如,要將新實體新增到資料庫,只需建立物件的新實例,設置其屬性,並使用ISession。

使用ITransaction管理事務

在NHibernate中,事務是通過ITransaction介面管理的,它確保了資料的完整性和一致性。 通過使用ISession,開發者可以確保所有操作在提交資料給資料庫之前都成功完成,或者如果出現問題則回滾,從而保持資料的穩定性。

完整程式碼範例

此範例包括NHibernate配置和映射文件的設置,並展示如何使用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");
        }
    }
}

資料庫可移植性和互操作性特性

NHibernate的設計初衷就是為了提供資料庫可移植性。 由於其方言配置,NHibernate可以在對程式碼庫進行最小更改的情況下適應大多數SQL資料庫。 這意味著您可以從SQL伺服器切換到MySQL或Oracle,而無需重寫資料存取層。

將NHibernate適應於各種資料庫系統如SQL伺服器

NHibernate中的XML配置文件允許開發者指定其資料庫系統特有的SQL方言。 這使得NHibernate成為一個靈活的解決方案,可以輕鬆適應於幾乎所有支援SQL的關聯資料庫,確保您的應用程式在不同資料庫系統之間的可移植性。

將NHibernate與IronPDF一起使用

NHibernate C# (它如何為開發者工作):圖3 - IronPDF首頁

將NHibernate與IronPDF整合是一個強大的組合,可以增強您的.NET應用程式。 它允許您使用NHibernate管理資料庫操作,同時利用IronPDF從您的資料中生成PDF文件。 考慮一個情景,您的應用程式需要提供使用者特定的文件,例如需要生成並以PDF格式下載的員工報告。 NHibernate可以有效地管理從您的資料庫中檢索資料的過程,而IronPDF可以將這些資料轉換為格式良好的PDF文件。

安裝IronPDF

首先,確保IronPDF新增到您的專案中。 您可以通過NuGet套件管理器安裝IronPDF套件來列入其中。

PM > Install-Package IronPdf

NHibernate C# (它如何為開發者工作):圖4 - 通過NuGet套件管理器安裝IronPDF

程式碼範例

讓我們深入研究如何在您的應用程式中實現這一點。 在設置NHibernate並從資料庫檢索所需資料(如員工詳細資訊)後,您會準備一個HTML模板來代表PDF文件應該呈現的樣子。 這個HTML模板可以動態填充從NHibernate獲得的数据。 例如,如果您正在為一名員工生成報告,模板將包括員工姓名、ID以及其他相關詳細資訊的佔位符。

這是一個詳細的程式碼範例,演示了如何使用NHibernate提取資料並使用IronPDF將其轉換為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");
    }
}

NHibernate C# (它如何為開發者工作):圖5 - 上述程式碼的範例輸出

在此程式碼中,OpenSession()是一個方法,它初始化了一個NHibernate會話,用於提取員工資料。 來自IronPDF的ChromePdfRenderer類然後接收填充了提取資料的HTML模板並將其渲染為PDF。 此PDF保存於本地,但也可以通過網頁介面直接傳輸到使用者。

結論

在本教程中,我們探討了NHibernate如何簡化.NET應用程式中的資料庫操作,以及它與IronPDF的整合如何通過允許生成動態PDF文件來增強功能。 NHibernate提供強大的資料管理工具,而IronPDF則提供了從填充資料的HTML模板建立專業品質PDF的便捷方式。

IronPDF有免費試用版,授權價格具有成本效益,可為您的應用程式整合強大的PDF生成功能。 這些工具一起提供了管理資料和生成文件的全面解決方案,適合企業級和小型專案。

Jacob Mellor,首席技術官 @ Team Iron
首席技術官

Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。

...
閱讀更多

相關文章

Key in blue circle

立即免費取得 30 天試用金鑰。

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

OR
bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
預訂您的免費現場演示
Booking Badge

受到全球數百萬工程師的信任

Iron Software的客戶標誌
獲取您的無義務諮詢
填寫以下表格或電子郵件sales@ironsoftware.com
您的詳細資訊將始終保密。
受到全球數百萬工程師的信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰。
無需信用卡或帳戶建立
C# 用於PDF的NuGet程式庫
使用NuGet安裝

版本: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. 在解決方案資源管理器,右鍵點選參考,管理NuGet包
  2. 選擇瀏覽並搜尋"IronPdf"
  3. 選擇套件並安裝
C# PDF DLL
下載DLL

版本: 2026.9

或者點擊此處下載Windows安裝程式。

  1. 下載並解壓IronPDF到類似~/Libs的位置,位於您的解決方案目錄中
  2. 在Visual Studio解決方案資源管理器,右鍵點選參考。選擇瀏覽,"IronPdf.dll"

授權從$999起