【C#】Dapper应用 #1 : QueryMultiple

说明:

写SQL Script的时候,常会需要返回多个结果的情况
但在程式端呼叫时,需要拆成多个reqesut向资料库请求

假如数量一多这样效率就会变差
这时候可以使用Dapper的QueryMutiple方法

只需要一个reqeust就可以返回多个结果

举例(使用LINQPAD):

使用之前回答别人问题时,写的简单script:
我可以先查询未被更新的资料
接着做更新动作
再查询更新完的资料
以上动作我只要使用一个Request就可以完成

void Main(){var sql = @"--【以下建立测试资料数据】create table #Tem_Table ([Creat_Time] datetime,[Update_Time] datetime,[InFo] nvarchar(5));insert into #Tem_Table ([Creat_Time],[Update_Time] ,[InFo]) values ('2018/04/03 12:00:00.000','2018/04/03 12:00:00.000','False')    ,('2018/02/03 12:00:00.000','2018/03/04 12:00:00.000','False')      ,('2018/03/03 12:00:00.000','2018/01/04 12:00:00.000','False')  ;--原先资料打印select * from #Tem_Table;--更新动作update #Tem_Tableset [Creat_Time] = case when not [Creat_Time]=[Update_Time] then [Update_Time] else [Creat_Time]  end    ,[InFo] = case when not [Creat_Time]=[Update_Time] then 'True'else [InFo]  end--更新资料打印select * from #Tem_Table;";//执行查询,获取结果集集合  var multi = this.Connection.QueryMultiple(sql);var dynamic_result_1 = multi.Read().ToList().Dump();var dynamic_result_2 = multi.Read().ToList().Dump();}

原理、使用方式:

先使用QueryMultiple跟资料库要资料,并序列化存到记忆体内(GridReader)
可以在SoureCode看到呼叫QueryMultiple方法时候会去呼叫QueryMultipleImpl

之后使用Read读取资料(注意是读取资料顺序是按照SQL SELECT的顺序)
可以在SoureCode看到呼叫Read方法时候会去呼叫ReadDeferred
接着反序列化并依照读取index向记忆体读取资料


假如要了解更多Dapper内容
推荐:[C#][ASP.NET] Web API 开发心得 (6) - 轻量级的 ORM 工具 Dapper + Slapper.AutoMapper


OK,打完收工,有疑问可以留言给我 :-)


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章