- NHibernate 教程
- NHibernate - 主页
- NHibernate - 概述
- NHibernate - 架构
- NHibernate-Orm
- NHibernate - 环境设置
- NHibernate - 入门
- NHibernate - 基本 Orm
- NHibernate - 基本 Crud 操作
- NHibernate - 分析器
- 将 Intelliesnse 添加到映射文件
- NHibernate - 数据类型映射
- NHibernate - 配置
- NHibernate - 覆盖配置
- NHibernate - 批量大小
- NHibernate - 缓存
- NHibernate - 映射组件
- NHibernate - 关系
- NHibernate - 集合映射
- NHibernate - 级联
- NHibernate - 延迟加载
- NHibernate - 逆关系
- NHibernate - 加载/获取
- NHibernate - Linq
- NHibernate - 查询语言
- NHibernate - 标准查询
- NHibernate - QueryOver 查询
- NHibernate - 原生 Sql
- NHibernate - 流畅的Hibernate
- NHibernate 有用资源
- NHibernate - 快速指南
- NHibernate - 有用的资源
- NHibernate - 讨论
NHibernate - 概述
在本章中,我们将讨论NHibernate是什么、它可以在哪些平台上实现、它的优点是什么以及与之相关的其他方面。
什么是 NHibernate?
NHibernate 是一个成熟的、开源的.NET 框架对象关系映射器。它得到积极开发,功能齐全,并在数千个成功项目中使用。它构建在ADO.NET之上,当前版本是NHibernate 4.0.4。
NHibernate 是一个开源 .NET 对象关系映射器,根据GNU Lesser General Public License分发。
它基于 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 驱动程序。