终于解决了NHibernate的排序问题

首先说另一个问题,就是前面那篇文章上说的在Groups表中只调入ParentID为空的那些顶级组对象的方法:
???ICriterion ex=Expression.IsNull("ParentGroup");
???Order o=Order.Asc("GroupID");
???IList li=session.CreateCriteria(typeof(Group)).Add(ex).AddOrder(o).List();

第 一句话定义一个条件,括号里面的是Group类里面该条件所对应的字段,而不是数据库里的真正字段名,第二句话定义一个排序,(这个只是提取这个顶级组的 时候的排序),第三句话使用session的这个方法加载对象,它的后面可以跟多个条件。这样加载进来的List就是包含了所有顶级组的对象的列表,而且 是排序的。但是这样并不能保证每个对象里的ChildGroups和Items里面所包含的子类也是排序的。

解决办法是,在类定义中直接使 用IList类来定义这两个序列对象,而不是使用Iesi库里面的ISet。同时,在hbm配置文件里也不能使用set来定义one-to-many,要 使用bag,这就是我一开始使用IList总是失败提示无法正确转换对象的原因所在。bag段允许一个特别定义:Order By。
????? <bag name="ChildGroups" inverse="true" table="Groups" cascade="all" order-by="GroupID asc">

通 过这样的设置,在调入某个组所对应的下级组的时候,生成的SQL语句就会加上Order by GroupID,调入的对象也就是排序的了。(我还不知道bag后面加的这个是类里面字段的名字还是数据库里面字段的名字,应该是类里的名字,这个很容易 试出来。因为我定义的两个字段的名字是相同的,所以暂时懒的去管它了)。

解决了这个问题,终于可以开始用NHibernate开发实用的程序了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值