开发手册 欢迎您!
软件开发者资料库

NHibernate - 概述

NHibernate概述 - 从概述,架构,Orm,环境设置,入门,基本Orm,基本Crud操作,Profiler,添加Intelliesnse到映射文件,数据类型映射,配置,覆盖配置,批量大小,缓存,映射组件开始学习NHibernate ,关系,集合映射,级联,延迟加载,反向关系,加载/获取,Linq,Hibernate查询语言,条件查询,QueryOver查询,本机Sql,流利Hibernate。

在本章中,我们将讨论NHibernate是什么,它可以实现的所有平台,它的优点以及与之相关的其他方面.

什么是NHibernate?

NHibernate是一个用于.NET框架的成熟的开源对象关系映射器.它积极开发,功能齐全,并在成千上万的成功项目中使用.它建立在 ADO.NET 之上,当前版本是 NHibernate 4.0.4.

  • NHibernate是一个开源的.NET对象关系映射器,在 GNU宽通用公共许可证下发布.

  • 它基于Hibernate,它是一个流行的Java对象关系映射器,它有一个非常成熟和活跃的代码库.

  • 它提供了一个框架,用于将面向对象的域模型映射到传统的关系数据库.

  • NHibernate是由 Tom Barrett 启动的项目自2003年2月开始实施,这是他们的第一次提交.

  • 这是一个很大的项目,提供了很多功能.

  • 有一个 NuGet包可用,这使得添加到项目非常容易.

为什么选择NHibernate?

现在的问题是为什么我们需要对象关系映射器?它是因为对象世界和关系世界之间存在脱节.

  • 在对象世界中,一切都是基于物体的;我们将那些拥有我们数据的东西称为对象.

  • 关系世界都是基于集合的,我们正在处理与对象不同的表和行世界.

  • 在对象世界中,我们有单向关联.如果客户有指向订单的指针,则并不一定意味着订单指向客户的指针,可能会也可能不会.

  • 在关系世界中,所有关联都是双向,并且可以通过外键完成.

  • 所有关联本质上都是双向的,所以当我们处理对象关系映射时,我们还需要处理这种断开.

  • 在对象世界中,我们正在使用指针是单向的,而在关系世界中,我们有外键本身是双向的.

  • 对象世界有这种继承的概念,车辆可以有许多不同的子类,所以汽车是一种类型的汽车,一种是一种类型的汽车,而一种跑车是一种汽车,这些类型的继承关系.

  • 关系世界没有这种继承的概念.

映射

那么我们如何映射所有这些不相交的关系?这种映射概念来自对象关系映射器.主要有三件事需要理解,如下图所示.

Mapping

  • 在您的应用程序中,您将需要类定义,这通常是C#代码及其代表我们的类的.NET代码,例如Employee类,Customer类,订单类等.

  • 在底部,您可以看到数据库架构,这是我们的数据定义语言关系数据库,指定客户表的样子,员工表的样子.

  • 在这些之间我们有映射元数据告诉对象关系mapper如何根据行和列以及外键关系从C#中的对象世界转换到数据库世界.

  • 此映射元数据可以表示为各种不同的方式,我们将看到一些最典型的不同方式在NHibernate应用程序中.

  • 它由 HBM(Hibernate Mapping)文件表示,这些文件是XML文件.

数据库支持

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

  • SQL服务器是主要支持的数据库,这是大多数开发人员的意思在开发过程中使用它可能是最常见的.

  • 也适用于Oracle .

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

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