📜  NHibernate-概述

📅  最后修改于: 2020-11-19 05:29:37             🧑  作者: Mango


在本章中,我们将讨论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类,Order类等。

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

  • 在这两者之间,我们具有映射元数据,该元数据告诉对象关系映射器如何根据行和列以及外键关系将C#中的对象世界转换为数据库世界。

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

  • 它由HBM(休眠映射)文件表示,它们是XML文件。

数据库支持

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

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

  • 与Oracle配合很好

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

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