.NET 幫助

NHibernate C#(開發人員如何使用)

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

NHibernate 是一個為 .NET 框架設計的強大物件關聯映射 (ORM) 框架。 它為開發人員提供了一種有效的方法,以銜接 .NET 應用程序的面向對象世界與資料庫的關聯世界之間的鴻溝。 通過使用NHibernate,您可以顯著減少實現數據訪問層所需的樣板代碼量,使您的 .NET 應用程序更簡潔且更易於維護。

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

像 NHibernate 這樣的 ORM 框架透過允許開發人員以物件及其屬性的方式而非 SQL 語句來處理資料,從而簡化了與關聯式資料庫的互動。 此抽象幫助開發人員更多地關注應用程式的業務邏輯,而較少關注底層的 SQL 命令和資料庫模式。 例如,NHibernate 處理所有 SQL 的生成和執行,允許通過簡單的物件轉換和物件操作來執行插入、刪除和更新等操作。

在 .NET 專案中設置 NHibernate

要在您的 .NET 項目中開始使用 NHibernate,第一步是安裝 NHibernate 套件。 這可以透過 Visual Studio 的 NuGet 套件管理器輕鬆完成,使用以下指令:

Install-Package IronPdf

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 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 物件來管理與資料庫的連接,並執行事務操作。 由於建立會話工廠成本高,因此通常只在應用程式生命週期中建立一次,這使得它成為性能優化的重要元素。

NHibernate 的關鍵類別和方法

NHibernate 圍繞著幾個基本類別和方法運作。 例如,ISession 介面在 NHibernate 中發揮著基本作用,促進資料查詢和操作會話的建立。 像 OpenSession 這樣的方法可以幫助開發人員啟動交易、執行 SQL 命令,並使用 SQL 語句或 NHibernate 自身的 HQL(Hibernate 查詢語言)查詢資料庫。

使用 NHibernate 將實體映射到數據庫表

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

詳細查看映射文件中使用的屬性和屬性

在這些映射檔案中,您可以為每個屬性指定各種屬性,例如非空約束或唯一約束。 NHibernate 也允許進行複雜的映射,如一對多和多對一關係,為在面向物件的框架中表示關連數據結構提供了一套強大的工具。

在 NHibernate 中執行 SQL 命令和交易

NHibernate 通過抽象底層的 SQL 命令來簡化 CRUD(創建、讀取、更新、刪除)操作。 開發人員可以利用ISession介面提供的方法來執行這些操作,而無需撰寫明確的 SQL 程式碼。 例如,要向資料庫添加新實體,您只需創建該物件的新實例,設置其屬性,然後使用ISessionSave 方法。

使用ITransaction管理交易

在 NHibernate 中,交易是通過 ITransaction 介面管理的,這確保了資料的完整性和一致性。 使用 ISessionBeginTransaction 方法,開發人員可以確保在將數據提交到數據庫之前所有操作均成功完成,或者在發生問題時回滾,從而保持數據的穩定性。

完整程式碼範例

此範例包括NHibernate配置和映射文件的設置,並演示如何使用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
$vbLabelText   $csharpLabel

資料庫可移植性和互操作性功能

NHibernate 的設計旨在提供資料庫的可移植性。 由於其方言配置,NHibernate 能夠以最少的代碼庫更改適應大多數 SQL 數據庫。 這意味著您可以從 SQL Server 切換到 MySQL 或 Oracle,而無需重寫您的數據訪問層。

為各種資料庫系統(例如 SQL Server)調整 NHibernate

NHibernate 的 XML 配置文件允許開發人員指定與其數據庫系統相關的 SQL 方言。 這使 NHibernate 成為一個靈活的解決方案,可以輕鬆適應幾乎任何支援 SQL 的關聯式資料庫,確保您的應用程式可以跨不同的資料庫系統移植。

使用 NHibernate 與 IronPDF

NHibernate C#(它如何對開發人員工作):圖 3 - IronPDF 首頁

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

安裝 IronPDF

首先,確保將 IronPDF 添加到您的專案中。 您可以通過安裝 IronPDF 套件,透過 NuGet 套件管理器來加入它。

Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
$vbLabelText   $csharpLabel

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 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
$vbLabelText   $csharpLabel

NHibernate C#(開發人員如何使用):圖5 - 上述代碼的示例輸出

在此程式碼中,OpenSession() 是一個初始化 NHibernate 會話的方法,用於獲取員工數據。 IronPDF 的 ChromePdfRenderer 類別接著將填入獲取數據的 HTML 模板轉換為 PDF 格式。 此 PDF 已儲存於本地,但也可以透過網路介面直接串流給用戶。

結論

NHibernate C#(它如何為開發人員工作):圖 6 - IronPDF 授權頁面

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

IronPDF 提供免費試用,許可證起價為$749,為將強大的 PDF 生成功能集成到您的應用程式中提供了一個具成本效益的解決方案。 這些工具共同提供了一個完整的解決方案,用於管理數據和生成文檔,非常適合企業級別和小規模項目。

Chipego
奇佩戈·卡林达
軟體工程師
Chipego 擁有天生的傾聽技能,這幫助他理解客戶問題,並提供智能解決方案。他在獲得信息技術理學學士學位後,于 2023 年加入 Iron Software 團隊。IronPDF 和 IronOCR 是 Chipego 專注的兩個產品,但隨著他每天找到新的方法來支持客戶,他對所有產品的了解也在不斷增長。他喜歡在 Iron Software 的協作生活,公司內的團隊成員從各自不同的經歷中共同努力,創造出有效的創新解決方案。當 Chipego 離開辦公桌時,他常常享受讀好書或踢足球的樂趣。
< 上一頁
Ocelot .NET(對開發人員的運作方式)
下一個 >
Rebus .NET Core 示例(開發人員使用方式)