封装EF code first用存储过程的分页方法
一年半没有做过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用存储过程的分页方法的更多相关文章
- 只是一个用EF写的一个简单的分页方法而已
只是一个用EF写的一个简单的分页方法而已 慢慢的写吧.比如,第一步,先把所有数据查询出来吧. //第一步. public IQueryable<UserInfo> LoadPagesFor ...
- 从零开始,搭建博客系统MVC5+EF6搭建框架(1),EF Code frist、实现泛型数据仓储以及业务逻辑
前言 从上篇30岁找份程序员的工作(伪程序员的独白),文章开始,我说过我要用我自学的技术,来搭建一个博客系统,也希望大家给点意见,另外我很感谢博客园的各位朋友们,对我那篇算是自我阶段总结文章 ...
- EF Code First、DbContext
EF Code First.DbContext 对于之前一直使用webForm服务器控件.手写ado.net操作数据库的同学,突然来了EF和MVC,好多新概念一下泉涌而出,犹如当头一棒,的确有点不知所 ...
- 【干货】利用MVC5+EF6搭建博客系统(一)EF Code frist、实现泛型数据仓储以及业务逻辑
习MVC有一段时间了,决定自己写一套Demo了,写完源码再共享. PS:如果图片模糊,鼠标右击复制图片网址,然后在浏览器中打开即可. 一.框架搭建 二.创建数据库 1.创建一个空的EF code fr ...
- IoC容器Autofac - Autofac + Asp.net MVC + EF Code First(转载)
转载地址:http://www.cnblogs.com/JustRun1983/archive/2013/03/28/2981645.html 有修改 Autofac通过Controller默认构造 ...
- MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- Contoso 大学 - 使用 EF Code First 创建 MVC 应用
原文 Contoso 大学 - 使用 EF Code First 创建 MVC 应用 Contoso 大学 Web 示例应用演示了如何使用 EF 技术创建 ASP.NET MVC 应用.示例中的 Co ...
- 基于Jquery+Ajax+Json+存储过程 高效分页
在做后台开发中,都会有大量的列表展示,下面给大家给大家分享一套基于Jquery+Ajax+Json+存储过程高效分页列表,只需要传递几个参数即可.当然代码也有改进的地方,如果大家有更好的方法,愿留下宝 ...
- 利用EF和C#泛型实现通用分页查询
利用EF和C#泛型实现通用分页查询 Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (ORM) 解决方案,是微软的ORM框架.此框架将数据库中的 ...
随机推荐
- bzoj 1185 [HNOI2007]最小矩形覆盖 凸包+旋转卡壳
题目大意 用最小矩形覆盖平面上所有的点 分析 有一结论:最小矩形中有一条边在凸包的边上,不然可以旋转一个角度让面积变小 简略证明 我们逆时针枚举一条边 用旋转卡壳维护此时最左,最右,最上的点 注意 注 ...
- 【NOIP2016练习】T2 花花的聚会 (树形DP,倍增)
题意: 花花住在 H 国.H 国有 n 个城市,其中 1 号城市为其首都.城市间有 n 1 条单向道路.从任意一个城市出发,都可以沿着这些单向道路一路走到首都.事实上,从任何一个城市走到首都的路径是唯 ...
- angular杂谈
<element ng-include="filename" onload="expression" autoscroll="expressio ...
- buffer和cache怎么让你们解释的那么难理解?
对于一个即将踏上“系统运维”或者更加高大尚的工作“系统调优”,如果这不跟这两哥们搞好关系了,坑的不只有内存,更坑的是你拿着调优的钱却干着随时被调的活.因为作为一个系统运维人员来说监控和优化IO性能这是 ...
- 2019南昌邀请赛 C. Angry FFF Party 大数矩阵快速幂+分类讨论
题目链接 https://nanti.jisuanke.com/t/38222 题意: 定义函数: $$F(n)=\left\{\begin{aligned}1, \quad n=1,2 \\F(n- ...
- (4)Unity3d镜头
Input.GetMouseButton()://获取鼠标按钮状态,0-鼠标左键,1-鼠标右键,2-鼠标中键: Input.GetAxis("Mouse X ") //鼠标水平向移 ...
- 泛域名Wildcard Domain
泛域名Wildcard Domain 泛域名Wildcard Domain是一种特殊的域名形式.它使用星号作为域名的一级.例如,*.baidu.com就是使用星号作为域名的二级部分.在域名解析中,一个 ...
- servlet跳转页面后图片不显示
我是用图片的相对路径,原先直接打开jsp的话图片是可以正常显示的,通过servlet跳转之后图片就显示不出来了 后来发现是图片路径的问题, 我是将图片放在WebRoot里面自己创建的img中,原先图片 ...
- atom 隐藏右边的白线
atom-text-editor.editor .wrap-guide {//隐藏右边的白线visibility: hidden;}
- eclipse主题下载网站
http://eclipsecolorthemes.org/