zoukankan      html  css  js  c++  java
  • 崩溃中!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就是设定一次取出的数据量是多少,这样就很明了! 当然只是一种粗略的思路,具体细节在验证后我会发一片文章上来,

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

  • 相关阅读:
    理解C#系列 / 核心C# / 常量
    理解C#系列 / 核心C# / 变量
    理解C#系列 / C#语言的特性
    理解C#系列 / .NET体系结构
    利用DMZ对象保护全局变量
    随手翻的一道摩拜校招题
    关于为函数形参赋值和搜索变量标识符的云云
    竟然修改形参有这么可怕的后果!!
    牛得一逼的delete操作符
    屏蔽属性
  • 原文地址:https://www.cnblogs.com/chenkai/p/1467475.html
Copyright © 2011-2022 走看看