- NHibernate 教程
- NHibernate - 首页
- NHibernate - 概述
- NHibernate - 架构
- NHibernate - ORM
- NHibernate - 环境设置
- NHibernate - 快速入门
- NHibernate - 基础ORM
- NHibernate - 基础CRUD操作
- NHibernate - 性能分析器
- 为映射文件添加IntelliSense
- NHibernate - 数据类型映射
- NHibernate - 配置
- NHibernate - 覆盖配置
- NHibernate - 批处理大小
- NHibernate - 缓存
- NHibernate - 组件映射
- NHibernate - 关系映射
- NHibernate - 集合映射
- NHibernate - 级联操作
- NHibernate - 延迟加载
- NHibernate - 反向关系
- NHibernate - Load/Get 方法
- NHibernate - LINQ
- NHibernate - 查询语言 (HQL)
- NHibernate - Criteria 查询
- NHibernate - QueryOver 查询
- NHibernate - 原生SQL
- NHibernate - Fluent NHibernate
- NHibernate 有用资源
- NHibernate - 快速指南
- NHibernate - 有用资源
- NHibernate - 讨论
NHibernate - 概述
本章将讨论NHibernate是什么,它可以在哪些平台上实现,它的优点以及其他相关方面。
什么是NHibernate?
NHibernate是一个成熟的、开源的.NET框架对象关系映射器 (ORM)。它积极开发中,功能齐全,并已成功应用于数千个项目。它构建于ADO.NET之上,当前版本为NHibernate 4.0.4。
NHibernate是一个开源的.NET对象关系映射器,并根据GNU较宽松公共许可证发布。
它基于Hibernate(一个流行的Java对象关系映射器),拥有非常成熟和活跃的代码库。
它提供了一个框架,用于将面向对象的领域模型映射到传统的关联数据库。
NHibernate由Tom Barrett发起,该项目自2003年2月首次提交以来就一直存在。
这是一个大型项目,提供了许多功能。
有一个NuGet包可用,这使得将其添加到项目中非常容易。
为什么选择NHibernate?
现在的问题是,我们为什么需要对象关系映射器 (ORM)?这是因为对象世界和关系世界之间存在脱节。
在对象世界中,一切都是围绕对象展开的;我们称之为对象的东西拥有我们的数据。
关系世界是完全基于集合的,我们处理的是表和行,这与对象世界不同。
在对象世界中,我们有单向关联。如果一个客户有一个指向订单的指针,并不一定意味着订单也有一个指向客户的指针,它可能也有可能没有。
在关系世界中,所有关联都是双向的,可以通过外键实现。
所有关联本质上都是双向的,因此当我们处理对象关系映射时,我们也需要处理这种脱节。
在对象世界中,我们使用的是单向指针,而在关系世界中,我们有本质上是双向的外键。
对象世界具有继承的概念,其中车辆可以有多个不同的子类,因此汽车是一种车辆,船是一种车辆,跑车是一种汽车,这些都是继承关系的类型。
关系世界没有这种继承的概念。
映射
那么我们如何映射所有这些不相交的关系?这个映射的概念来自于对象关系映射器。主要有以下三种需要理解的内容,如下图所示。
在您的应用程序中,您将需要类定义,这通常是C#代码及其.NET代码,用于表示我们的类,例如Employee类、Customer类、Order类等。
在底部,您可以看到数据库模式,这是我们在关系数据库中的数据定义语言 (DDL),它指定了客户表、员工表的外观。
在这两者之间,我们有映射元数据,它告诉对象关系映射器如何将C#中的对象世界转换为数据库世界中的行、列和外键关系。
这种映射元数据可以用多种不同的方式表示,我们将研究在NHibernate应用程序中最典型的几种不同方式。
它由HBM(Hibernate Mapping)文件表示,它们是XML文件。
支持的数据库
NHibernate支持各种不同的数据库。任何现有的关系数据库都可以被NHibernate访问。
SQL Server是主要支持的数据库,大多数开发人员在开发过程中都在使用它,它可能是最常见的数据库。
它也与Oracle很好地配合使用。
它还支持DB2、Firebird、MySQL、PostgreSQL、SQLite。
它还具有ODBC和OLEDB驱动程序。