2009年3月18日

摘要: 多对多关系在数据库也是比较常见的,它通过一个中间表将两个主表关联起来。 下面来看看多对多关联在nh的实现,示例是一个User和Group之间的多对多关联。 先来看看User类的映射信息: 在多对多定义中,定义了中间表为UserGroups,此表只有两个字段:user_id和group_id;... 阅读全文
posted @ 2009-03-18 14:55 裴晓华 阅读(225) 评论(0) 推荐(0) 编辑
 
摘要: 对数据库的操作是少不了事务处理的,事务能保整数据完整性和有效性。 在nh中,使用Transaction对象对.net的事务对象(实现了IDbTransaction接口的对象)进行了包装。 在nh中,一个典型的事务处理是这样的(见ISession.cs的注释) ISession sess = fa... 阅读全文
posted @ 2009-03-18 14:54 裴晓华 阅读(414) 评论(0) 推荐(0) 编辑
 
摘要: MAP文件,可以充当一个数据库的描述,例如数据库的基本关系,类型的定义,一般情况下,当给出了MAP文件,您完全可以根据它生成对应的数据库. using NHibernate; using NHibernate.Cfg; using NHibernate.Dialect; using NHiber... 阅读全文
posted @ 2009-03-18 14:54 裴晓华 阅读(191) 评论(0) 推荐(0) 编辑
 
摘要: 当持久化对象时,显然必须存在把记录的值赋值到对象属性和取得对象属性的值用于持久化操作,对于更新操作,还需要检查对象的值是否已发生变化,即是否为Dirty,这些操作都是由对象的持久化类来完成的。有关持久化类可参考《会话和持久化操作》一文。 下面对NH的源码进行分析,以了解NH中数据加载和更新的过程... 阅读全文
posted @ 2009-03-18 14:53 裴晓华 阅读(222) 评论(0) 推荐(0) 编辑
 
摘要: 本文将对HQL查询文本的解析过程进行分析,这个可以说是NH中比较复杂的一块了(个人认为),涉及到的类也比较多。 建议阅读之前先深呼吸十下,看完之后脑袋成浆糊可不要找我哟。:-) 在HQL数据加载一文中,我们有提到QueryTranslator的创建过程,代码如下: //*** Session... 阅读全文
posted @ 2009-03-18 14:52 裴晓华 阅读(563) 评论(0) 推荐(0) 编辑
 
摘要: NH中,HQL是一个十分强大的面向对象的查询语言,简单的说,就是不需要使用实际的表名和列名来查询数据,而改用类名和属性。 有两种方式来执行HQL数据加载,一种是直接使用ISession的Find方法,另一种是使用IQuery接口。 IQuery接口提供了一些额外的设置,最重要的就是分页了,这个和I... 阅读全文
posted @ 2009-03-18 14:51 裴晓华 阅读(360) 评论(0) 推荐(0) 编辑
 
摘要: 在数据库的多对多关系中, 实现方法是通过一个额外的关联表将两个主表关联起来,关联表中只保存两个主表的主健,显然, 主表与关联表是一对多的关系. 这样两个主表就通过这个关联表构成了一个多对多的关系. 典型的例子就是用户和权限了, 每个用户可以有多个权限, 而每个权限也可以分配给多个用户. 通过一个用... 阅读全文
posted @ 2009-03-18 14:50 裴晓华 阅读(236) 评论(0) 推荐(0) 编辑
 
摘要: nh中的one-to-one(一对一)映射有两种情况, 一种是主键(PrimaryKey)关联, 一种是外健(ForeignKey)关联. 在主键关联的情况下, 显然必须有一个主键是根据别一个主键而来的, nh通过一个特殊的方式来处理这种情况, 要注意的是两个主健名称必须同名. 而外健一对一关联, ... 阅读全文
posted @ 2009-03-18 14:49 裴晓华 阅读(258) 评论(0) 推荐(0) 编辑
 
摘要: ICriteria是使用Expression进行数据加载的接口, 提供了设置表达式(Expression), 排序方式(Order), 分页记录等操作. 它使用一种类似于SQL语句where表达表的方式来加载满足条件的数据. 下面以一个查询Username为billy, Password为test的... 阅读全文
posted @ 2009-03-18 14:48 裴晓华 阅读(360) 评论(0) 推荐(0) 编辑
 
摘要: nh会话提供一种使用表达式(就像SQL语句的where表达式)来载入数据的方法, 以取得满足条件的对象集合。 通过CreateCriteria方法, 可以取得一个ICriteria接口, 这个接口用于操作表达式和排序字段. 由CriteriaImpl类实现,此类加有Internal修饰,因此不能在程... 阅读全文
posted @ 2009-03-18 14:47 裴晓华 阅读(211) 评论(0) 推荐(0) 编辑