NHibernate初学三之条件查询(Criteria Queries)与AspNetPager分页实例(二)

2014-11-24 01:37:21 · 作者: · 浏览: 1
[ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
复制代码
复制代码
Create PROCEDURE [dbo].[Pro_Insert]
AS
declare @ID int
BEGIN
set @ID=0
while @ID<200000
begin
insert into T_School(SchoolName,BuildDate,Address,IsSenior,StudentNum) VALUES('中学教育'+cast(@ID as varchar),'2014/3/4 21:49:32','厦门软件园',1,390)
set @ID=@ID+1
end
END
复制代码
2.2 在实体层简单定义几个分页要用到的类,对一些属性进行封装,下面只是PageInfo类,其它类的代码大家直接查看源代码;
复制代码
namespace Wujy.ModelLibrary.Pagination
{
public class PageInfo
{
public PageInfo() { }
public PageInfo(Type entityType,int pageIndex)
{
this._entityType = entityType;
this._pageIndex = pageIndex;
}
public PageInfo(Type entityType, int pageIndex,params NCondition[] conditions)
{
this._entityType = entityType;
this._pageIndex = pageIndex;
this._conditions = conditions;
}
public PageInfo(Type entityType, int pageIndex, NCondition[] conditions,NOrder[] orders)
{
this._entityType = entityType;
this._pageIndex = pageIndex;
this._conditions = conditions;
this._orderFields = orders;
}
private Type _entityType;//类
public Type EntityType
{
get { return _entityType; }
set { _entityType = value; }
}
private int _pageIndex = 1;//页号
public int PageIndex
{
get { return _pageIndex; }
set { _pageIndex = value; }
}
private NCondition[] _conditions;//条件
public NCondition[] Conditions
{
get { return _conditions; }
set { _conditions = value; }
}
private NOrder[] _orderFields;//排序
public NOrder[] OrderFields
{
get { return _orderFields; }
set { _orderFields = value; }
}
private int pageSize = 10;
public int PageSize
{
get { return pageSize; }
set { pageSize = value; }
}
private int _recordCount;
public int RecordCount
{
get { return _recordCount; }
set { _recordCount = value; }
}
private int pageCount;
public int PageCount
{
get { return pageCount; }
set { pageCount = value; }
}
private System.Collections.IList list;
public IList List
{
get { return list; }
set { list = value; }
}
}
}
复制代码
2.3 在DAL层里面创建一个基类,把分页的代码写在这里,下面就例出比较重要的几个代码:
复制代码
public void DoPager(PageInfo pi)
{
if (pi.EntityType == null)
{
throw new Exception("分页类名不能为空");
}
using (ISession session = new NHibernateHelper().GetSession())
{
ICriteria qbc = session.CreateCriteria(pi.EntityType);
//总条数
qbc.SetProjection(NHibernate.Criterion.Projections.RowCount());
prepareConditions(qbc, pi.Conditions);
pi.RecordCount = qbc
.SetMaxResults(1)
.UniqueResult();
//总页数
pi.PageCount =
pi.RecordCount % pi.PageSize == 0
pi.RecordCount / pi.PageS