封装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[5];spm[0] = new SqlParameter("@Sql", sqlstr);spm[1] = new SqlParameter("@PageIndex", pageIndex);spm[2] = new SqlParameter("@PageSize", pagesize);spm[3] = new SqlParameter("@OrderByField", orderByField);spm[4] = new SqlParameter("@TotalRecord", totalCount);spm[4].Direction = ParameterDirection.Output;var data = db.Database.SqlQuery<T>("exec Pro_PageProcedure @Sql,@PageIndex,@PageSize,@OrderByField,@TotalRecord out", spm).ToList();totalCount = Convert.ToInt32(spm[4].Value.ToString());return data;} }

 

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

CREATE PROCEDURE [dbo].[Pro_PageProcedure]@Sql nvarchar(max),        --表名@PageIndex int = 1 ,            --指定当前为第几页@PageSize int,                    --每页多少条记录@OrderByField nvarchar(1000),        --row_number需要的排序字段@TotalRecord int output           --返回总页数 
asDeclare @_sql nvarchar(max);    --计算总记录数set @_sql = 'select @TotalRecord = count(*) from (' + @Sql + ') a'EXEC sp_executesql @_sql,N'@TotalRecord int OUTPUT',@TotalRecord OUTPUT--计算总记录数        Declare @StartRecord intDeclare @EndRecord intset @StartRecord = (@pageIndex-1)*@PageSize + 1set @EndRecord = @StartRecord + @pageSize - 1set @_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的可以去看一下

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

转载于:https://www.cnblogs.com/gangtienanzi/p/5377492.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

apache httpd mysql_Centos7安装配置Apache(httpd)+php+mysql+phpMyAdmin

一、安装mysql执行命令&#xff1a;rpm -ivh mysql-community-release-el7-5.noarch.rpm执行 yum -y install mysql mysql-server mysql-devel&#xff0c;安装成功。再次使用该命令&#xff0c;然后得到以下信息打开mysql服务 &#xff1a;service mysqld start进入mysql客户端…

如何:创建公钥/私钥对

要使用强名称为程序集签名&#xff0c;必须具有公钥/私钥对。 这一对加密公钥和加密私钥用于在编译过程中创建强名称程序集。 您可以使用强名称工具 (Sn.exe) 来创建密钥对。 密钥对文件通常具有 .snk 扩展名。 注意 在 Visual Studio 中&#xff0c;C# 和 Visual Basic 项…

用户设置及用户默认设置

1、创建 其中&#xff0c;Root.plist中为设置 2、读取应用中的设置 3、在应用中修改默认设置 4、注册默认值 5、保证设置有效&#xff08;我们注册所有控制器&#xff0c;以便接收从暂停执行状态唤醒的应用发送出来的通知&#xff09; 每个控制器都订阅我们关注的通知。 6、撤销…

activemq jdbc mysql_activeMQ JDBC Master Slave

ActiveMQ集群应用2\ ActiveMQ JDBC 主从集群3\ 解决单点故障&#xff1a;JDBC Master Slave本人应用的为集群方案中的一种&#xff0c; JDBC Master Slave &#xff0c;说明及好处就看如上外链文章了&#xff0c;上正题&#xff0c;方案如何实施及程序如何调用&#xff11;&…

AsyncTask知识整理笔记

Android的AsyncTask比Handler更轻量级一些&#xff0c;适用于简单的异步处理。&#xff08;但是&#xff0c;要注意&#xff01;&#xff01;&#xff01;&#xff01;使用更轻量级&#xff0c;实际执行却反之&#xff0c;因为AsyncTask里封装了Handler&#xff0c;本质也是使用…

mysql sql语句 入门_mysql(3)mysql的sql语句入门

1.登录mysql与退出mysql登录&#xff1a;mysql -u账号 -p密码 -h主机地址 -P端口号 -e 执行的sql语句&#xff1b; //密码一般不直接写出&#xff0c;回车后隐藏写入 &#xff0c;-h可以不写默认是localhost退出&#xff1a;quit&#xff0c;exit &#xff0c;ctrlc备注&…

orcale 基本查询(1)

orcale 基本查询      查询当前用户下的所有表&#xff1a;     select * from tab;      查询表结构&#xff1a;   desc 表名设置行宽&#xff1a;    set linesize 120;设置列宽&#xff1a;    数值类型&#xff1a;      col 列名 for…

优秀的Android资源

今天&#xff0c;收藏了一下“优秀的Android资源”&#xff0c;以后有时间也学习学习。 一、开发工具 开发android第一步就是安装开发工具SDK&#xff0c;国内有一些机构和公司对些作了境像&#xff0c;这个网站作了详细统计列表&#xff1a;http://www.androiddevtools.cn/&am…

mysql视图表修复_mysql中含有视图数据库在恢复数据时视图变成数据表的解决方法...

# version: 1.0 for linux# method: 全备份mysql数据# author: fengzhanhai# history: create program V1.0 20121101 by fengzhanhai# tasks: * 1 * * * /home/db-backup/mysql/mysqlbk.sh >> /dev/null 2>&1#conf---------UserNamesdmtvm…

LeetCode OJ 160. Intersection of Two Linked Lists

Write a program to find the node at which the intersection of two singly linked lists begins. For example, the following two linked lists: A: a1 → a2↘c1 → c2 → c3↗ B: b1 → b2 → b3begin to intersect at node c1. Notes: If the …

监控mysql业务数据分析_MySQL数据库监控指标之执行性能总结

查询性能MySQL 用户监控查询延迟的方式有很多&#xff0c;既可以通过 MySQL 内置的指标&#xff0c;也可以通过查询性能模式。从 MySQL 5.6.6 版本开始默认启用&#xff0c;MySQL 的 performance_schema 数据库中的表格存储着服务器事件与查询执行的低水平统计数据。1、perform…

redis集群关闭 启动报错_使用虚拟机搭建 Redis 集群,实现数据库的负载均衡功能。...

实操题目:使用虚拟机搭建 Redis 集群&#xff0c;实现数据库的负载均衡功能。并使用图文描述整个过程。先创建集群:①创建集群需要使用ruby脚本,所以要先安装ruby环境 安装ruby环境:yum install ruby 安装ruby的包管理器:yum install rubygems②进入到redis的安装目录下的 src …

转载:Java编程风格与命名规范整理

转载自&#xff1a;传送门 不想复制&#xff0c;点进去看喽23333333转载于:https://www.cnblogs.com/Dumblidor/p/5394390.html

[转]完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法

HTML5的语义化标签以及属性&#xff0c;可以让开发者非常方便地实现清晰的web页面布局&#xff0c;加上CSS3的效果渲染&#xff0c;快速建立丰富灵活的web页面显得非常简单。 HTML5的新标签元素有&#xff1a; <header> 定义页面或区段的头部&#xff1b; <footer&…

mysql change index_MySQL · 引擎特性 · Innodb change buffer介绍

前言在前面几期月报我们介绍了undo log、redo log以及InnoDB如何崩溃恢复来实现数据ACID的相关知识。本期我们介绍另外一种重要的数据变更日志&#xff0c;也就是InnoDB change buffer。 Change buffer的主要目的是将对二级索引的数据操作缓存下来&#xff0c;以此减少二级索引…

获取当前日期时间并格式化 - 常见格式

获取系统当前日期时间的方法&#xff1a; 1 //获取系统当前日期时间2 Date.prototype.format function (format) {3 var o {4 "M": this.getMonth() 1, //month5 "d": this.getDate(), //day6 "h": this.getHour…

dncnn图像去噪_一种基于DnCNNs改进的图像降噪方法与流程

本发明涉及图像处理技术领域&#xff0c;具体涉及一种基于dncnns改进的图像降噪方法。背景技术&#xff1a;随着科技进步&#xff0c;新的图像技术在逐渐推广&#xff0c;在日常生活中人们对于图像的要求也越来越高&#xff0c;针对阴天或夜晚等弱光条件下拍摄的图像具有噪点较…

fan怎么写 jin_拼音为fan的字

7画匥匥fn ㄈㄢˊ◎古同“笲”。3画凡凡fn ㄈㄢˊ1、平常的&#xff0c;不出奇的&#xff1a;平凡。凡庸。凡夫俗子。2、指人世间(宗教或迷信的说法)&#xff1a;凡尘。凡心。3、所有的&#xff1a;凡年满十八岁的公民&#xff0c;都有选举权与被选举权。凡是。4、总共&#xf…

Linux 挂载命令 --mount

1.挂载光盘命令 mount : mount [-t vfstype] [-o options] device dir mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载点 -t 指定挂载的文件系统类型&#xff0c;ext3,ext4,iso9660(光盘的文件类型)f等类型 -o 指定额外的挂载选项 卸载光盘命令 umount 设备文件名或挂…

ios view添加上边框_iOS开发之如何给View添加指定位置的边框线详解

本文主要给大家介绍了关于iOS如何给View添加指定位置边框线的相关内容&#xff0c;分享出来供大家参考学习&#xff0c;下面话不多说了&#xff0c;来一起看看详细的介绍吧。略微封装了一下&#xff0c;给View添加指定位置的边框线&#xff0c;其中位移枚举的使用询问了哥们儿&…