EF框架 與 Dapper框架 調用分頁存儲過程

1. SqlServer創建存儲過程:

--創建存儲過程
create proc sp_Show
(
    @index int,  --當前頁
    @size int,     --每頁大小
    @totalcount int out,  --總數據數
    @pagecount int out      --總頁數
)
as
begin 
    --計算總數據數
    select @totalcount=COUNT(*) from Goods       --(where name like '%'+ @name +'%')
    --計算總頁數
    set @pagecount=CEILING(@totalcount*1.0/@size)

    if(@index<=0)
    set @index=1
    if(@index>=@pagecount)
    set @index=@pagecount

    --分頁查詢
    select * from 
        (select ROW_NUMBER() over(order by GId) rn,*from Goods) tb1 where    --(where name like '%'+ @name +'%')
        rn between ((@index-1)*@size)+1 and (@index*@size)
end

declare @x int,@y int
exec sp_Show 1,2,@x out,@y out
select @x 總數據數,@y 總頁數

2.  Entity FrameWork框架:

      //分頁存儲過程顯示
        [HttpGet]
        public PageDate GetGoods2(int index, int size)
        {
            //實例化參數
            SqlParameter[] parameters = new SqlParameter[]
            {
                new SqlParameter("@index",index),
                new SqlParameter("@size",size),
                new SqlParameter("@totalcount",SqlDbType.Int), //總數據數
                new SqlParameter("@pagecount",SqlDbType.Int),  //總頁數
            };
            //指定輸出參數
            parameters[2].Direction = ParameterDirection.Output;
            parameters[3].Direction = ParameterDirection.Output;

            //存儲過程查詢
            var list = db.Database.SqlQuery<Goods>("exec sp_Show @index,@size,@totalcount out,@pagecount out", parameters).ToList();

            PageDate page = new PageDate();
            page.List = list;
            page.PageCount = int.Parse(parameters[3].Value.ToString());
            return page;
        }

3. Dapper框架:

     //存儲過程分頁
        [HttpGet]
        public PageDate GetGoods2(int index, int size)
        {
          //添加參數
            var p = new DynamicParameters();
            p.Add("@index", index);
            p.Add("@size", size);
          //指定輸出參數
            p.Add("@totalcount", dbType: DbType.Int32, direction: ParameterDirection.Output);  //總數據數
            p.Add("@pagecount", dbType:DbType.Int32,direction:ParameterDirection.Output);      //總頁數

            List<Goods> list = new List<Goods>();
            using (SqlConnection conn = new SqlConnection(connstr))
            {
                list = conn.Query<Goods>("sp_Show",p,commandType:CommandType.StoredProcedure).ToList();
            }

            PageDate page = new PageDate();
            page.List = list;
           //獲取指定的參數值
            page.PageCount = p.Get<int>("@pagecount");
            return page;
        }