什么是 NHibernate,为什么需要它?
\n\nNHibernate 是一个功能强大且成熟的 .NET 平台对象关系映射库 (ORM),使用 C# 编写。它是著名的 Java 库 Hibernate 的移植版本。NHibernate 解决了 C# 应用程序中面向对象数据模型与数据库(SQL Server、PostgreSQL、MySQL、Oracle 等)中关系数据模型之间的根本性不匹配问题。
\n\nNHibernate 的主要任务是自动将 C# 对象(POCO——普通旧 CLR 对象)与数据库表中的记录进行数据转换。您无需为 CRUD 操作(创建、读取、更新、删除)编写数百行重复的 SQL 代码,而是直接操作对象,NHibernate 负责生成并执行 SQL 查询。
\n\n为什么要使用 NHibernate?
\n- \n
- 提高开发效率: 您编写的代码更少,尤其是用于 ADO.NET 的样板代码。 \n
- 减少错误数量: SQL 查询自动生成,从而降低了语法错误和 SQL 注入的风险(在正确使用的情况下)。 \n
- 数据库无关性: 您只需更改连接字符串和 NHibernate 方言即可切换数据库管理系统,而无需重写业务逻辑。 \n
- 缓存管理: 内置的一级和二级缓存机制可显著加快应用程序的运行速度。 \n
- 延迟加载: 关联数据仅在真正需要时才加载,从而节省资源。 \n
- 强大的查询语言: HQL(Hibernate 查询语言)和 LINQ to NHibernate 允许您编写类型安全的查询。 \n
安装 NHibernate
\n\nNHibernate 通过 NuGet(.NET 的包管理器)分发。安装非常简单。
\n\n通过包管理器控制台:
\nInstall-Package NHibernate\n\n通过 .NET CLI(适用于 .NET Core / .NET 5+ 项目):
\ndotnet add package NHibernate\n\n其他包(根据需要):
\n- \n
- NHibernate.Caches.CoreMemoryCache — 用于二级缓存。 \n
- System.Data.SqlClient 或 Microsoft.Data.SqlClient — 用于 SQL Server。 \n
- Npgsql — 用于 PostgreSQL。 \n
- MySql.Data — 用于 MySQL。 \n
安装后,您需要配置(通常在 app.config、web.config 或 appsettings.json 文件中,或通过代码中的 Fluent 配置)。
快速入门与代码示例
\n\n我们来看一个使用 NHibernate 的简单示例。假设我们在 SQL Server 数据库中有一个 Products 表。
1. 创建实体类:
\npublic class Product\n{\n public virtual int Id { get; set; }\n public virtual string Name { get; set; }\n public virtual decimal Price { get; set; }\n}\n重要: 所有属性都必须是 virtual——这是 NHibernate 实现代理机制(延迟加载、更改跟踪)的要求。
2. 创建映射文件 (Product.hbm.xml):
\n<?xml version="1.0" encoding="utf-8" ?>\n<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"\n assembly="YourAssemblyName"\n namespace="YourNamespace">\n <class name="Product" table="Products">\n <id name="Id" column="ProductId">\n <generator class="native" />\n </id>\n <property name="Name" column="Pro