NHibernate扫盲

  1. NHibernate中Get和Load的区别

    (1) get()采用立即加载方式,而load()采用延迟加载;

      get()方法执行的时候,会立即向数据库发出查询语句,

    而load()方法返回的是一个代理(此代理中只有一个id属性),只有等真正使用该对象属性的时候,才会发出sql语句

    (2) 如果数据库中没有对应的记录,get()方法返回的是null.而load()方法出现异常ObjectNotFoundException

    如果加载一个对象的目的是为了访问它的属性,可以用get方法

    如果加载一个对象的目的是为了删除它,或者是为了建立于别的对象的关联,可以用load

     

    2. 使用ICriteria.Order对结果集排序,第二个参数true代表asc,false代表desc。例如下面例子查询Customer对象按FirstName降序、Lastname升序。

    .AddOrder(new NHibernate.Criterion.Order("Firstname", false))

    .AddOrder(new NHibernate.Criterion.Order("Lastname", true))

     

    3.NHibernate支持/定义的几种类型的集合

    Bag:对象集合,每个元素可以重复。例如{1,2,2,6,0,0},在.Net中相当于IList或者IList<T>实现。

    Set:对象集合,每个元素必须唯一。例如{1,2,5,6},在.Net中相当于ISet或者ISet<T>实现,Iesi.Collections.dll程序集提供ISet集合。

    List:整数索引对象集合,每个元素可以重复。例如{{1,"YJingLee"},{2,"CnBlogs"},{3,"LiYongJing"}},在.Net中相当于ArraryList或者List<T>实现。

    Map:键值对集合。例如{{"YJingLee",5},{"CnBlogs",7},{"LiYongJing",6}},在.Net中相当于HashTable或者IDictionary<Tkey,TValue>实现。

    实际上,我们大多数情况下使用Set集合类型,因为这个类型和关系型数据库模型比较接近。

     

    4.NHibernate的接口大致分为四类

    1. 被应用程序调用进行基本数据操作(增、删、改、查)的接口。这些接口是应用程序的业务逻辑层和控制层与NHibernate的主要交互点。ISession, ITransaction, IQuery和ICriteria属于此类。

    2. 被应用程序用来配置NHibernate的接口。Configuration就属此类。

    3. 回调接口。应用程序用回调接口来响应NHibernate中触发的事件。这类接口包括Interceptor, ILifecycle和IValidatable等。

    4. 用于扩展NHibernate的强大映射功能的接口。这类接口通常被应用程序的基础架构来实现。IUserType, ICompositeUserType, 和IIdentifierGenerator属于此类。

     

    5.NH操作的7个步骤

    (1)       Confiuration

    (2)       创建SessionFactory

    (3)       打开Session

    (4)       开始一个事务

    (5)       持久化操作Save/Update/Delete

    (6)       提交事务

    (7)       关闭Session

     

posted @ 2016-03-07 21:41  BloggerSb  阅读(203)  评论(0编辑  收藏  举报