一年半没有做过MVC的项目了,还是很怀念(因为现在项目还是原来的ASPX),个人还是喜欢mvc,最近又开始重拾MVC,感觉既熟悉又陌生。

记录一下封装好的分页代码

首先先说下 我使用EF codefirst的目的. 是因为可以有更纯净的代码 不再有EDMX这些东西  而不是真正的用 code first 先有代码 再生成数据库.所以 我虽然使用

的是codefirst 但是本质依然是数据库优先.这个大家可以网上找资料

在基类中写好方法

public class BaseService
{
public static XOContext db = null; public BaseService()
{
db = new XOContext();
} public static List<T> SelectPageList<T>(string sqlstr, int pageIndex, int pagesize, string orderByField, ref int totalCount) where T : class
{
SqlParameter[] spm = new SqlParameter[];
spm[] = new SqlParameter("@Sql", sqlstr);
spm[] = new SqlParameter("@PageIndex", pageIndex);
spm[] = new SqlParameter("@PageSize", pagesize);
spm[] = new SqlParameter("@OrderByField", orderByField);
spm[] = new SqlParameter("@TotalRecord", totalCount);
spm[].Direction = ParameterDirection.Output;
var data = db.Database.SqlQuery<T>("exec Pro_PageProcedure @Sql,@PageIndex,@PageSize,@OrderByField,@TotalRecord out", spm).ToList();
totalCount = Convert.ToInt32(spm[].Value.ToString());
return data;
}
}

因为直接用linq的分页方式感觉效率还是不是很高,所以改用存储过程,上面方法用泛型的方式,可以灵活的调用。存储过程网上很多,也可以自己写一个,以下是我用的存储过程

CREATE PROCEDURE [dbo].[Pro_PageProcedure]
@Sql nvarchar(max), --表名
@PageIndex int = , --指定当前为第几页
@PageSize int, --每页多少条记录
@OrderByField nvarchar(), --row_number需要的排序字段
@TotalRecord int output --返回总页数
as
Declare @_sql nvarchar(max); --计算总记录数 set @_sql = 'select @TotalRecord = count(*) from (' + @Sql + ') a' EXEC sp_executesql @_sql,N'@TotalRecord int OUTPUT',@TotalRecord OUTPUT--计算总记录数 Declare @StartRecord int
Declare @EndRecord int set @StartRecord = (@pageIndex-)*@PageSize +
set @EndRecord = @StartRecord + @pageSize - set @_sql ='select * from ( select ROW_NUMBER() Over(' + @OrderByField + ') as _ttRowId,* from (' + @Sql + ') _tt0 ) _tt1 '
set @_sql = @_sql + 'where _ttRowId between ' + CAST(@StartRecord as nvarchar) + ' and ' + CAST(@EndRecord as nvarchar) Exec(@_sql)

上面方法写在基类,各个子类继承基类都可以直接调用此方法进行分页查询,以下是其中一个子类调用

/// <summary>
/// 获取分页列表
/// </summary>
/// <returns></returns>
public List<FixedAnswer> GetPageList(int pageIndex, int pageSize, ref int totalCount)
{
string strSql = "select * from FixedAnswer";
string orderfied = "order by id desc";
return SelectPageList<FixedAnswer>(strSql, pageIndex, pageSize, orderfied, ref totalCount);
}

注意这里传的实体对象类FixedAnswer是对应表FixedAnswer,假如我们可能不需要查询这个表的所有字段,那必须把某些字段提取出现建立一个对应的实体类,因为SqlQuery<T>的方法返回的对象都是要求对象属性都是一一对应。联表查询也可以使用这样的方式

这样每次都要建立一个相应的实体对象似乎有些麻烦,但是有时用起来还是不错的,网上也有直接返回DataTable的可以去看一下

表达能力有限很少写博客,只是用来记录,不喜勿喷。

来自:http://www.cnblogs.com/gangtienanzi/p/5377492.html

封装EF code first用存储过程的分页方法的更多相关文章

  1. 只是一个用EF写的一个简单的分页方法而已

    只是一个用EF写的一个简单的分页方法而已 慢慢的写吧.比如,第一步,先把所有数据查询出来吧. //第一步. public IQueryable<UserInfo> LoadPagesFor ...

  2. 从零开始,搭建博客系统MVC5+EF6搭建框架(1),EF Code frist、实现泛型数据仓储以及业务逻辑

    前言      从上篇30岁找份程序员的工作(伪程序员的独白),文章开始,我说过我要用我自学的技术,来搭建一个博客系统,也希望大家给点意见,另外我很感谢博客园的各位朋友们,对我那篇算是自我阶段总结文章 ...

  3. EF Code First、DbContext

    EF Code First.DbContext 对于之前一直使用webForm服务器控件.手写ado.net操作数据库的同学,突然来了EF和MVC,好多新概念一下泉涌而出,犹如当头一棒,的确有点不知所 ...

  4. 【干货】利用MVC5+EF6搭建博客系统(一)EF Code frist、实现泛型数据仓储以及业务逻辑

    习MVC有一段时间了,决定自己写一套Demo了,写完源码再共享. PS:如果图片模糊,鼠标右击复制图片网址,然后在浏览器中打开即可. 一.框架搭建 二.创建数据库 1.创建一个空的EF code fr ...

  5. IoC容器Autofac - Autofac + Asp.net MVC + EF Code First(转载)

    转载地址:http://www.cnblogs.com/JustRun1983/archive/2013/03/28/2981645.html  有修改 Autofac通过Controller默认构造 ...

  6. MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  7. Contoso 大学 - 使用 EF Code First 创建 MVC 应用

    原文 Contoso 大学 - 使用 EF Code First 创建 MVC 应用 Contoso 大学 Web 示例应用演示了如何使用 EF 技术创建 ASP.NET MVC 应用.示例中的 Co ...

  8. 基于Jquery+Ajax+Json+存储过程 高效分页

    在做后台开发中,都会有大量的列表展示,下面给大家给大家分享一套基于Jquery+Ajax+Json+存储过程高效分页列表,只需要传递几个参数即可.当然代码也有改进的地方,如果大家有更好的方法,愿留下宝 ...

  9. 利用EF和C#泛型实现通用分页查询

    利用EF和C#泛型实现通用分页查询       Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (ORM) 解决方案,是微软的ORM框架.此框架将数据库中的 ...

随机推荐

  1. hdu 1695 容斥原理或莫比乌斯反演

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  2. 【MFC】error RC2108: expected numerical dialog constant(转)

    原文转自 http://blog.csdn.net/renyhui/article/details/23120469 [解决方案]在控件ID后面添加 "Static", SS_BI ...

  3. YUV和RGB格式分析【转】

    转自:http://www.cnblogs.com/silence-hust/p/4465354.html 做嵌入式项目的时候,涉及到YUV视频格式到RGB图像的转换,虽然之前有接触到RGB到都是基于 ...

  4. 不要使用 reader.Peek() 去读取每行数据

    1.问题描述 使用SteamRead的Peek()和ReadLine()来读取流中的数据,如果数据行数太多,会读取不完整(后面有些数据就读不出来了). 比如: while (srResponseRea ...

  5. html5(拖拽3)

    <!DOCTYPE html"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> ...

  6. 洛谷——P1988 火炬

    P1988 火炬 题目描述 2008北京奥运会,你想成为四川汶川的一名火炬手,经过层层选拔,终于到了最后一关,这一关是一道很难的题:任意给定一个正整数N(N<=100000),求一个最小的正整数 ...

  7. 【面试】最容易被问到的N种排序算法!

    面试官:小明,是吧?你都知道哪些排序算法,哪几种是稳定排序? 小明:这个我有总结! 关于排序稳定性的定义 通俗地讲就是能保证排序前两个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同. ...

  8. 机器学习之SVM

    一.线性分类器: 首先给出一个非常非常简单的分类问题(线性可分),我们要用一条直线,将下图中黑色的点和白色的点分开,很显然,图上的这条直线就是我们要求的直线之一(可以有无数条这样的直线) 假如说,我们 ...

  9. [NSThread sleepForTimeInterval:3.0];

    在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)laun ...

  10. 使用和不使用navigationbar分别处理显示和返回页面

    不使用navigationbar的情况下 AnnounceViewController *pushView = [[AnnounceViewController alloc]init];pushVie ...