.NET 帮助

NHibernate C#(它是如何为开发人员工作的)

发布 2024年六月6日
分享:

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 包管理器使用以下命令轻松完成安装:

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

了解 NHibernate 的核心组件

会话工厂(Session Factory)是 NHibernate 的关键组件之一,其设计采用了工厂设计模式。该组件创建会话对象(Session objects),用于管理与数据库的连接和事务操作。会话工厂的创建成本很高,因此通常在每个应用程序生命周期中只创建一次,这使其成为性能优化的关键要素。

NHibernate中的关键类和方法

NHibernate 围绕着几个重要的类和方法。例如,"ISession "接口在 NHibernate 中扮演着重要角色,它有助于创建数据查询和操作会话。OpenSession "等方法可以帮助开发人员启动事务、执行 SQL 命令,并使用 SQL 语句或 NHibernate 自身的 HQL 查询数据库。 (Hibernate 查询语言).

使用 NHibernate 将实体映射到数据库表

NHibernate 中的实体映射是通过映射文件(通常用 XML 编写)完成的。这些文件通常以实体类 (例如,Employee.hbm.xml)映射文件定义了实体的属性如何映射到数据库表的列。典型的映射文件包括类名、表名和每个属性的详细信息,包括主键、列名和数据类型。

详细查看映射文件中使用的属性和属性

在这些映射文件中,你可以为每个属性指定各种属性,比如非空约束或唯一约束。NHibernate 还允许一对多和多对一关系等复杂映射,为在面向对象框架内表示关系数据结构提供了一套强大的工具。

在 NHibernate 中执行 SQL 命令和事务

NHibernate 简化了 CRUD (创建、读取、更新、删除) 通过抽象底层 SQL 命令,开发人员可以执行这些操作,而无需编写明确的 SQL 代码。开发人员无需编写显式 SQL 代码,而是使用 ISession接口提供的方法即可执行这些操作。例如,要在数据库中添加一个新实体,只需创建一个新的对象实例,设置其属性,然后使用 ISessionSave 方法即可。

使用 ITransaction 管理事务

NHibernate中的事务是通过Iransaction接口来管理的,它可以确保数据的完整性和一致性。开发人员可以使用 "ISession "中的 "BeginTransaction "方法,在将数据提交到数据库之前确保所有操作都已成功完成,或者在出错时进行回滚,从而保持数据的稳定性。

完整代码示例

本示例包括 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
VB   C#

数据库可移植性和互操作性功能

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 已添加到项目中。您可以通过 NuGet 软件包管理器安装 IronPDF 软件包,将其添加到项目中。

Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
VB   C#

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
VB   C#

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 生成功能集成到应用程序中的经济高效的解决方案。这些工具为管理数据和制作文档提供了全面的解决方案,是企业级和小型项目的理想选择。

< 前一页
Ocelot .NET(开发人员如何使用)
下一步 >
Rebus .NET Core 示例(对开发人员的工作原理)

准备开始了吗? 版本: 2024.9 刚刚发布

免费NuGet下载 总下载量: 10,731,156 查看许可证 >