NHibernate扫盲

时间:2023-03-09 08:08:22
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