• 崩溃中!Nhibernate的数据分页.


    这两天在做项目一个模块中关于基于Asp.net MVC ,底层的数据访问用的是Nhibernate OR Mapping技术, 其中涉及到数据分页. 确实令人苦恼!

    Nhibernate中我刚开始的思路是做一个十万中量级别的数据分页,起初打算在Nhibernate中用T-SQl来做,而且在Asp.MVC框架中只能使用客户端控件,而非Nhibernate中HQL查询语法,但是在写好T-SQl语句后发现一个Nhibernate虽然对Avg count(*)等加以支持,但Top关键字确无法支持,中途也利用平畴SQL的放法,一个下午后无果而返.

    下午下班后我有尝试一种在Nhibernate中使用存储过程的方式来进行数据分页,即把原来的T-sql十万当量的数据分页封装一下,但是8:30自后,发现两点对存储过程的现在,一方面配置上问题都是第一次接触,而且Nhibernate2.0版本对存储过程要求配置很严格,另外必须返回一个数据集,功能就都没法实现,更不要说数据分页的性能了,这种方式抛弃.

    在网上Google一下发现园子里也有不少关于Nhibernate的数据分页,就抓紧时间看了一下,其中一篇文章倒是打破了我以往的思路,

    就是把利用Nhibernate中HQL语法查询出所需数据,nhibernate 提供了一个接口IQuery用来设置查询语句、参数等,此接口的实现类为QueryImpl,跟CriteriaImpl一样,不能在 nhibernate程序集外直接创建,只能通过session的CreateQuery来取得一个IQuery接口,

    Code
    IQuery接口的一些方法:
      SetMaxResults:设置返回的最大结果数,可用于分页;
      SetFirstResult:设置首个对象返回的位置,可用于分页;
      SetTimeout:设置操作的超时值,此值将传递给IDbCommand对象;
      Enumerable:返回查询的枚举对象;
      List:返回查询的对象集合;
      SetParameter:设置查询语句中参数的值和类型

    从上面可以发现两个非常重要的方法SetFirstResult(int startindex)和SetMaxResults(int size)

    这两个方法组合其实就代替了SQl中Top 关键字,当取出数据后装入Ilist<>中,通过SetFirstResult设置开始取位置,而SetMaxResults就是设定一次取出的数据量是多少,这样就很明了! 当然只是一种粗略的思路,具体细节在验证后我会发一片文章上来,

    也许这种方式并不合理,还希望有这方面经验的仁兄能指点一二,不胜感激!

  • 相关阅读:
    jpeg 文档格式
    gif 文件格式
    firefox前世今生
    png 文档格式
    字符'\xe5\x8c\x97\xe4\xba\xac\xe6\x96\xb0\xe5\x8d\x8e\xe7\x94\xb5\xe8\x84\x91\xe5\xad\xa6\xe6\xa0\xa1' 转为汉字
    SQL server 报错:
    encode 与 decode
    Octave 作图 无响应
    qmake建工程
    urlparse (scheme、netloc、path等)
  • 原文地址:https://www.cnblogs.com/chenkai/p/1467475.html
Copyright © 2020-2023  润新知