什么是?NHibernate?NHibernate是一个面向.NET环境的对象/关系数据库映射工具。

对象/关系数据库映射(object/relational mapping,ORM)这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。

 什么是ORM?对象-关系映射(Object/Relation Mapping。简称ORM),是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法。关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此。对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。

  

  面向对象是从软件project基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的。两套理论存在显著的差别。

为了解决这个不匹配的现象,对象关系映射技术应运而生。   

NHiberante的优缺点

长处

  (1).面向对象:NHiberante的使用时仅仅须要操纵对象。使开发更对象化,抛弃了数据库中心的思想,全然的面向对象思想。

  (2).透明持久化:带有持久化状态的、具有业务功能的单线程对象,此对象生存期非常短。这些对象可能是普通的POCO。这个对象没有实现第三方框架或者接口,唯一特殊的是他们正与(只一个)Session相关联。一旦这个Session被关闭,这些对象就会脱离持久化状态。这样就可被应用程序的不论什么层自由使用。

(比如,用作跟表示层打交道的传输数据对象。

  (3).它没有侵入性,即所谓的轻量级框架。

正由于它具有透明持久化的长处。它才没有侵入性。才是一个轻量级框架。

恒定一个框架为重量级、还是轻量级,是依据其侵入性而定夺的。而NHibernate就是一个轻量级ORM框架。

  (4).较好的移植性:支持多种数据库。便于数据库的迁移。

  (5).缓存机制:提供一、二级缓存和查询缓存。

  (6).开发效率:众所周知,使用NHibernate能够简化程序开发,从而达到高速开发的目的。作为软件公司,项目管理的关键就是控制开发成本。正由于使用NHibernate后所写的代码量降低了,相对于原先使用“SqlHelper、DAL、BLL”开发程序的项目周期缩短了,成本就降低了。

缺点

  (1).内存消耗:直接使用“SqlHelper、DAL、BLL”无疑是最省内存的。使用NHibernate后。内存开销比較大。这点是毋庸置疑的。

  (2).批量数据库的处理:因为NHibernate是基于面向对象的ORM框架。处理数据库的方式是针对单个对象的。

对数据库的增、删、改都是正对一条记录而言。对于批量改动、删除数据。不适合用NHiberante。这也是全部OR框架弱点。其原因,我觉得是在于与缓存机制的冲突。

  (3).较多使用数据库特性时。也不适合使用NHiberante。

如数据库中大量的存储过程、触发器、特点的SQL语句。

  (4).表关系比較混乱时也不适合使用NHiberante。

NHibernate仅仅适合于表与表的关系比較明白的环境中。

如本应该建立外键的。没有建立外键。这时使用NHiberante不仅没有降低工作量。反而添加了工作量。

  (5).学习成本:相对于NHibernate来说,使用“SqlHelper、DAL、BLL”操作数据库,学习成本比較低,并且上手非常快。使用NHibernate须要有一定OOP(面向对象编程)和OOD(面向对象设计)的基础。这对于基础薄弱的程序猿来说,从面向过程的编程到面向对象的编程。须要一定的投入;普通情况下须要学习1个月左右的时间才可以深入NHiberante。

NHibernate概括的更多相关文章

  1. NHibernate从入门到精通系列(1)——NHibernate概括

    内容摘要 NHibernate简介 ORM简介 NHibernate优缺点 一.NHibernate简介 什么是?NHibernate?NHibernate是一个面向.NET环境的对象/关系数据库映射 ...

  2. 下一个系列学习列表Spring.net+NHibernate+MVC

    开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo 刘冬.NET 2011-08-19 ...

  3. LSJ_NHibernate第一章 NHibernate介绍

    前言: 说起NHibernate网上资料真不少,但用的人却并不多,说起java的SSH框架大家可能就知道了,这里的H指的就是Hibernate,一款好用的ORM框架,在.net重写了这款好用的框架,名 ...

  4. 【转】NHibernate入门教程

    开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo 摘要: 热衷于开源框架探索的我发现A ...

  5. NHibernate——基本映射(5)

    一.映射定义概括 1.1 映射定义(Mapping declaration) 对象和关系数据库之间的映射是用一个XML文档(XML document)来定义的.这个映射文档被设计为易读的,并且可以手工 ...

  6. Nhibernate的Session管理

    参考:http://www.cnblogs.com/renrenqq/archive/2006/08/04/467688.html 但这个方法还不能解决Session缓存问题,由于创建Session需 ...

  7. "NHibernate.Exceptions.GenericADOException: could not load an entity" 解决方案

     今天,测试一个项目的时候,抛出了这个莫名其妙的异常,然后就开始了一天的调试之旅... 花了很长时间,没有从代码找出任何问题... 那么到底哪里出问题呢? 根据下面那段长长的错误日志: -- ::, ...

  8. nhibernate连接11g数据库

    我框架的数据映射用 nhibernate连接多数据库,这次又增加了oracle11g,负责开发的同事始终连接不上,悲催的sharepoint调试是在不方便... 下面描述下问题的解决,细节问题有3个: ...

  9. 全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)

    在开发涉及到数据库的程序时,常会遇到一开始设计的结构不能满足需求需要再添加新字段或新表的情况,这时就需要进行数据库迁移. 实现数据库迁移有很多种办法,从手动管理各个版本的ddl脚本,到实现自己的mig ...

随机推荐

  1. Qt程序打包成exe可执行文件

    很多Qt爱好者想发布自己的Qt软件,但却发现在其他没有安装Qt SDK的机器上无法运行,这就是本文想要说明的问题.现在网上大部分软件都要发布自己开发的应用程序,都会打包到exe文件中,待安装完exe文 ...

  2. 一起talk C栗子吧(第一百一十二回:C语言实例--线程同步概述)

    各位看官们,大家好.上一回中咱们说的是线程间通信的样例,这一回咱们说的样例是:线程同步.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,提到同步.我想大家都不陌生,由于我们在前面章回中介绍 ...

  3. Aizu - 2306 Rabbit Party (DFS图论)

    G. Rabbit Party Time Limit: 5000ms Case Time Limit: 5000ms Memory Limit: 65536KB 64-bit integer IO f ...

  4. POJ 题目2774 Long Long Message(后缀数组,求最长公共子串长度)

    Long Long Message Time Limit: 4000MS   Memory Limit: 131072K Total Submissions: 23696   Accepted: 97 ...

  5. jdk1.8Option类

    目的:为了解决一个方法返回的参数可能为空而无法传入到新的方法做参数的问题,java8产生了新的内容:Option. 定义:Option是一个可以为空的容器对象(注意本质上是个万能对象). 常用方法:1 ...

  6. node 命令行输入控件 prompt.js

        function print(){ console.log.apply(console , arguments) } var step ,_lstStp ,_onConfirmInput ,_ ...

  7. 使用Swing组件编写一个支持中文文本编辑程序ChineseTextEdit.java

      import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; public class C ...

  8. Kettle的设计

    不多说,直接上干货! 大家都知道,这2001年以来,一直在同各种ETL工具做斗争,所以Matt 确定了Kettle的一个主要设计目标是尽可能开放.主要就是指: 开发,可读的元数据格式(XML). 开放 ...

  9. 亿财道APP赚钱攻略,亿财道,一个看广告年入36万的APP

            亿财道(http://etway.net/),一款看广告(传单)赚钱的软件,这是一项革新的广告产品,代替了以往的纸质传单.在商家节约成本的同时,还给阅读者佣金,推广也有相应提成比例. ...

  10. 使用JS方法使页面滚动到指定元素+优化+API介绍(动画)

    前言 当页面最上部有顶部菜单是,使用锚点跳转的方法很容易挡住想要呈现的内容(如下图技能两个字被挡住了一半),为避免出现这样的问题,故滚动到指定元素使用用JS的方法来实现. 目录 使用的API简介 初版 ...