NHibernate - 概述

在本章中,我们将讨论 NHibernate 是什么、它可以在哪些平台上实现、它的优点是什么以及与之相关的其他方面。

什么是 NHibernate?

NHibernate 是一个成熟的开源 .NET 框架对象关系映射器。它开发活跃、功能齐全,并已在数千个成功项目中使用。它建立在 ADO.NET 之上,当前版本为 NHibernate 4.0.4。

  • NHibernate 是一个开源 .NET 对象关系映射器,根据 GNU 宽通用公共许可证分发。

  • 它基于 Hibernate,后者是一种流行的 Java 对象关系映射器,具有非常成熟和活跃的代码库。

  • 它提供了一个将面向对象域模型映射到传统关系数据库的框架。

  • NHibernate 由 Tom Barrett 发起,该项目自 2003 年 2 月以来一直存在,这是他们第一次提交。

  • 这是一个大项目,提供了很多功能。

  • 有一个可用的 NuGet 包,这使得将其添加到项目中非常容易。

为什么是 NHibernate?

现在的问题是为什么我们需要对象关系映射器?这是因为对象世界和关系世界之间存在脱节。

  • 在对象世界中,一切都围绕对象;我们将拥有我们数据的事物称为对象。

  • 关系世界都是基于集合的,我们处理的表和行与对象世界不同。

  • 在对象世界中,我们有单向关联。如果客户有一个指向订单的指针,这并不一定意味着订单有一个指向客户的指针,它可能有也可能没有。

  • 在关系世界中,所有关联都是双向的,并且可以通过外键来实现。

  • 所有关联本质上都是双向的,因此当我们处理对象关系映射时,我们也需要处理这种脱节。

  • 在对象世界中,我们使用单向的指针,而在关系世界中,我们拥有本质上是双向的外键。

  • 对象世界有继承的概念,其中车辆可以有许多不同的子类,因此汽车是一种车辆,船是一种车辆,跑车是一种汽车,这些类型的继承关系。

  • 关系世界没有有继承的概念。

映射

那么我们如何映射所有这些不相交的关系?映射的概念来自对象关系映射器。如下图所示,主要有三件事需要理解。

Mapping
  • 在您的应用程序中,您将需要类定义,通常是 C# 代码及其代表我们类的 .NET 代码,例如 Employee 类、Customer 类、Order 类等。

  • 在底部,您可以看到数据库模式,这是我们在关系数据库中的数据定义语言,它指定了客户表的样子,员工表的样子。

  • 在这两者之间,我们有映射元数据,它告诉对象关系映射器如何从 C# 中的对象世界转换为数据库世界(就行和列以及外键关系而言)。

  • 这种映射元数据可以用多种不同的方式表示,我们将研究其中的多种不同方式。 NHibernate 应用程序中的典型示例。

  • 它由 HBM (Hibernate Mapping) 文件表示,这些文件是 XML 文件。

支持的数据库

NHibernate 支持各种不同的数据库。任何现有的关系数据库都可以访问 NHibernate。

  • SQL 服务器是主要支持的数据库,大多数开发人员在开发过程中都会使用它,它可能是最常见的数据库。

  • 它还 与 Oracle 配合得很好。

  • 它还支持 DB2、Firebird、MySQL、PostgreSQL、SQL Lite

  • 它还具有 ODBC 和 OLEDB 驱动程序