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