什么是?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. php获取时间是星期几

    PHP星期几获取代码: date("l"); //data就可以获取英文的星期比如Sundaydate("w"); //这个可以获取数字星期比如123,注意0是 ...

  2. Having用法

    HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 和 SELECT 的交互方式类似.WHERE 搜索条件在进行分组操作之前应用:而 HAVING 搜索条件在进行分组操作之后应用 ...

  3. spring boot学习(转)

    玩转Spring Boot 前言         首先在这里对Spring Boot做个简单的介绍,对Spring Boot也关注了挺久了,Spring Boot是由Pivotal团队提供的全新框架, ...

  4. YAML说明

    YAML说明 https://www.cnblogs.com/songchaoke/p/3376323.html XML的简化

  5. 安装MYSQL错误“conflicts with file from package mysql-libs-*” 解决方法

    安装MYSQL的时候时: 错误现象: [root@localhost opt]# rpm -ivh MySQL-server-5.5.32-1.el6.x86_64.rpm Preparing... ...

  6. android 退出系统

    /** * */ package com.szkingdom.android.phone.utils; import java.io.BufferedReader; import java.io.IO ...

  7. Another app is currently holding the yum lock; waiting for it to exit…

    yum被锁定无法使用,错误信息截图如下:解决方法:rm -rf /var/run/yum.pid 来强行解除锁定,然后你的yum就可以运行了

  8. 9.variant move function change_cast

    包含的头文件 #include <iostream> #include <string> #include <boost/array.hpp> //异构的容器 #i ...

  9. 如何显示bootstrap fileinput缩略图上面的删除按钮

    bootstrap上传文件控件初始化js: //bootstrap上传文件控件 $(".fileupload").fileinput({ language: "zh&qu ...

  10. tabIndex-bootstrap中Get到的

    网页键盘的无障碍访问性 其实加了这个,可以控制Tab键切换的顺序,聚焦等 这个属性,任何标签都可以添加,没有兼容性限制,属性值的范围:0-32767 当一个元素设置tabindex属性值为-1的时候, ...