NHibernate – 概述
NHibernate – 概述
在本章中,我们将讨论什么是 NHibernate,它可以在哪些平台上实现,它的优势是什么以及与它相关的其他方面。
什么是NHibernate?
NHibernate 是一个成熟的开源对象关系映射器,用于 .NET 框架。它被积极开发、功能齐全并用于数千个成功的项目。它建立在ADO.NET之上,当前版本是NHibernate 4.0.4。
-
NHibernate 是一个开源的 .NET 对象关系映射器,根据GNU 宽松通用公共许可证分发。
-
它基于 Hibernate,Hibernate 是一种流行的 Java 对象关系映射器,并且具有非常成熟和活跃的代码库。
-
它提供了一个将面向对象的领域模型映射到传统关系数据库的框架。
-
NHibernate 是由Tom Barrett 发起的,这个项目从 2003 年 2 月开始,这是他们的第一次提交。
-
这是一个大项目,提供了很多功能。
-
有一个NuGet 包可用,这使得添加到项目变得非常容易。
为什么是NHibernate?
现在的问题是为什么我们需要对象关系映射器?这是因为对象世界和关系世界之间存在脱节。
-
在对象世界中,一切都基于对象;我们称对象为那些拥有我们数据的东西。
-
关系世界都是基于集合的,我们正在处理与对象世界不同的表和行。
-
在对象世界中,我们有单向关联。如果客户有一个指向订单的指针,并不一定意味着订单有一个指向客户的指针,它可能会也可能不会。
-
在关系世界中,所有关联都是双向的,可以通过外键完成。
-
所有的关联本质上都是双向的,所以当我们在处理对象-关系映射时,我们也需要处理这种脱节。
-
在对象世界中,我们使用的是单向指针,而在关系世界中,我们使用的是本质上是双向的外键。
-
对象世界有继承的概念,其中一辆汽车可以有许多不同的子类,所以汽车是一种交通工具,船是一种交通工具,而跑车是一种汽车,这些类型继承关系。
-
关系世界没有这种继承的概念。
映射
那么我们如何映射所有这些不相交的关系呢?这个映射概念来自对象关系映射器。如下图所示,主要需要理解三件事。
-
在您的应用程序中,您将需要类定义,通常是 C# 代码及其代表我们的类的 .NET 代码,例如 Employee 类、Customer 类、Order 类等。
-
在底部,您可以看到一个数据库模式,它是我们在关系数据库中的数据定义语言,它指定了客户表的外观,员工表的外观。
-
在这些之间,我们有映射元数据,它告诉对象关系映射器如何根据行和列以及外键关系从 C# 中的对象世界转换到数据库世界。
-
这种映射元数据可以用多种不同的方式表示,我们将研究 NHibernate 应用程序中最典型的多种不同方式。
-
它由HBM(Hibernate Mapping)文件表示,这些文件是 XML 文件。
数据库支持
NHibernate 支持多种不同的数据库。任何现有的关系数据库都可以访问 NHibernate。
-
SQL server 是主要支持的数据库,这是大多数开发人员在开发过程中使用的,它可能是最常见的。
-
它也适用于 Oracle。
-
它还支持 DB2、Firebird、MySQL、PostgreSQL、SQL Lite
-
它还具有ODBC 和 OLEDB 驱动程序。