NHibernate概念

一:ORM简介

对象/关系数据库映射工具object/relational mapping,ORM 这项技术:用来把对象模型表示的对象映射到基于SQL的关系型模型数据结构中 .NET数据类型到SQL数据类型的映射,数据查询和获取数据的方法。

二:NHibernate优点

1、面向对象

2、透明持久化:与Session关联,一旦这个session关闭,这些对象就会脱离持久化的状态,这样就可被任意层使用

3、没有入侵行:轻量级的ORM框架

4、更好的移植性:支持多种数据库

5、缓存机制:支持一二级缓存,查询缓存

6、开发效率:省去了SqlHelper,DAL,BLL

三:NHibernate缺点

1、内存消耗:使用SqlHelper,DAL,BLL省内存,使用Nhibernate消耗内存

2、批量数据库的处理:NHibernate是基于面向对象的ORM框架,处理数据库的方式是针对单个对象,批量修改删除对象,不适用与NHibernate,

3、不适用数据库的存储过程,触发器,特点的sql

4、表关系混乱也不适用于NHibernate

 四:

1、ISessionFactory

针对单个数据库映射关系经过编译后的内存镜像,是线程安全的。他是生成ISession的工厂,本身要用到IConnectionProvider。该对象可在进程或集群的级别上,为那些事务之间可重用的数据提供可选的二进制缓存。

2、会话 Session

单线程,生命周期短处的对象,代表应用程序和持久化层之间的一次对话。封装了一个ADO.NET的连接。也是Transaction的工厂。保存有必须的第一级持久化对象的,用于遍历对象图,或者通过标识符查找对象

3、持久化对象 Persistent 及其集合 Collections

生命期短促的单线程的对象,包括了持久化状态和商业功能,

4、临时对象Transient Object 及其集合 Collection

五:

1、可编程配置方式:

Configuration是仅在配置期使用的对象,从第一个SessionFactory开始建立的时候,他就失效了

2、获取ISessionFactory

当所有的映射都被Configuration解析之后,应用程序为了得到ISession实例,必须先得到他的工厂。这个工厂应该是被应用程序的线程所共享的。

ISessionFactory sessions=cfg.BuildSessionFactory();   使用多个数据库时,实例化多个ISessionFactory

3、用户自行提取ADO.NET连接

ISessionFactory可以使用一个用户自行提供的ADO.NET连接来打开ISession

IDbConnection conn=myapp.GetConnection();

ISession session=sessions.OpenSessoin(conn);

应用程序必须小心,不能在同一个连接上打开两个并行的ISession

4、NHibernate提供ADO.NET连接

ISessionFactory打开连接,SessionFactory必须实现知道ADO.NET的连接参数,有几种不同的方法设置参数

提供一个IDictionary实例给Configuration.Properies

在名为NHibernate的System.Configuration.NameValueSectionHandler类型的配置结点添加属性

在hibernate.cfg.xml中包含<property>元素

六:配置属性

1、SQL方言

假如你指定了方言,Hbernate会为上面列出的属性使用特殊的默认值

2、外连接抓取 Outer Join Fetching

如果你的数据库支持ANSI或者Oracle风格的外连接,外连接抓取可能提高性能,因为可以限制和数据库交互的数量(代价是数据库自身进行了更多的工作),外连接抓取运行允许你在一个select语句中就可以得到一个由一对一或者多对一连接构成的对象图。

在xml的映射文件中设置outer-join可以控制是否开启抓取功能

3、自定义CacheProvider

实现NHibernate.Cache.ICacheProvider接口,可以整合一个第二级缓存进来,

4、Logging 

通过Apache log4net ,NHibernate记录很多事件

一:持久化类Persistent Class

public class Cat

{

  private long _id;

  private string _name;

  public long Id

  {

   get{ return _id; }

   set{ _id=value; }

  }

  public string Name

  {

    get{ return _name; }

    set{ _name=value; }

  }

}

四条主要规则

1、为持久化声明访问器getters,setters

2、实现一个默认的构造函数constructor,NHibernate就可以使用Constructor.Invoke();

3、提供一个标识属性identifier property(可选)

4、建议使用不是sealed的类

实现继承inheritance

实现Equals()和GetHashCode()

持久化生命周期Lifecycle中回调CallBacks

合法性检查Validatable 回调

用属性代替xml

原文地址:https://www.cnblogs.com/xiaoyueryeah/p/7049702.html