由Dapper QueryMultiple 返回数据的问题得出==》Dapper QueryMultiple并不会帮我们识别多个返回值的顺序

简介:

异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#dapper

今天帮群友整理Dapper基础教程的时候手脚快了点,然后遇到了一个小问题,Dapper QueryMultiple 返回数据的问题

多个返回值用QueryMultiple ,这个大家都知道,如果不清楚的看下下面的文档:

这个是官方文档:

Multiple Results

Dapper allows you to process multiple result grids in a single query.

Example:

var sql = 
@"
select * from Customers where CustomerId = @id
select * from Orders where CustomerId = @id
select * from Returns where CustomerId = @id"; using (var multi = connection.QueryMultiple(sql, new {id=selectedId})) { var customer = multi.Read<Customer>().Single(); var orders = multi.Read<Order>().ToList(); var returns = multi.Read<Return>().ToList(); ... } 

按照文档来,为啥没数据呢,就ID有值?难道多表只能传一个参数,而且必须有关系???NONONO,如果这么多限制还叫Dapper吗??

给你3s找错误。。。。。

 

其实就是顺序弄颠倒了,园友可以当个经验==》Dapper QueryMultiple并不会帮我们识别多个返回值的顺序

Read获取的时候必须是按照上面返回表的顺序 (article,qqmodel,seotkd)

var articleList = multi.Read<Temp>();//类不见得一定得和表名相同
var QQModelList = multi.Read<QQModel>();
var SeoTKDList = multi.Read<SeoTKD>();

 

官方文档是这样写的,那我们能不能玩点其他的?就一定得定义一个类来获取对应的强类型吗?多返回值就不能动态获取吗???NONONO

直接

if (!multi.IsConsumed)
{

  var articleList = multi.Read();
  var QQModelList = multi.Read();
  var SeoTKDList = multi.Read();

}

一样的效果

周日会有一篇文章详细说下Dapper的,现在得出省了。。。。立刻,马上。。。

 

附录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using  (SqlConnection conn =  new  SqlConnection(connStr))
{
     string  sqlStr =  @"select Id,Title,Author from Article where Id = @Id
                       select * from QQModel where Name = @Name
                       select * from SeoTKD where Status = @Status" ;
     conn.Open();
     using  ( var  multi = conn.QueryMultiple(sqlStr,  new  { Id = 11, Name =  "打代码" , Status = 99 }))
     {
         //multi.IsConsumed   reader的状态 ,true 是已经释放
         if  (!multi.IsConsumed)
         {
             ////强类型
             ////注意一个东西,Read获取的时候必须是按照上面返回表的顺序 (article,qqmodel,seotkd)
             //var articleList = multi.Read<Temp>();//类不见得一定得和表名相同
             //var QQModelList = multi.Read<QQModel>();
             //var SeoTKDList = multi.Read<SeoTKD>();
 
             ////动态类型
             var  articleList = multi.Read();
             var  QQModelList = multi.Read();
             var  SeoTKDList = multi.Read();
 
             #region 输出
             foreach  ( var  item  in  QQModelList)
             {
                 Console.WriteLine(item.Id +  " "  + item.Name +  " "  + item.Count);
             }
             foreach  ( var  item  in  SeoTKDList)
             {
                 Console.WriteLine(item.Id +  " | "  + item.SeoKeywords);
             }
             foreach  ( var  item  in  articleList)
             {
                 Console.WriteLine(item.Author);
             }
             #endregion
         }
 
     }
}

  

 


本文转自毒逆天博客园博客,原文链接:http://www.cnblogs.com/dunitian/p/5221058.html,如需转载请自行联系原作者

相关文章
|
测试技术
Ts类型体操Easy部分
Ts类型体操Easy部分
109 0
ES 布尔查询中 minimum_should_match 参数使用避坑
ES 布尔查询中 minimum_should_match 参数使用避坑
|
搜索推荐 C++
白话Elasticsearch13-深度探秘搜索技术之基于multi_match+most fields策略进行multi-field搜索
白话Elasticsearch13-深度探秘搜索技术之基于multi_match+most fields策略进行multi-field搜索
90 0
|
算法
白话Elasticsearch14-深度探秘搜索技术之基于multi_match 使用most_fields策略进行cross-fields search弊端
白话Elasticsearch14-深度探秘搜索技术之基于multi_match 使用most_fields策略进行cross-fields search弊端
97 0
ts重点学习71-implement语句
ts重点学习71-implement语句
105 0
ts重点学习71-implement语句
ts重点学习49-函数得参数得处理方式
ts重点学习49-函数得参数得处理方式
85 0
ts重点学习49-函数得参数得处理方式
|
存储 索引
ES中 Nested 类型的原理和使用
ES中 Nested 类型的原理和使用
ts重点学习72-implement语句
ts重点学习72-implement语句
233 0
重构——18自封装字段(Self Encapsulate Field)
自封装字段(Self Encapsulate Field):你直接访问一个字段,但与字段之间的耦合关系逐渐变得笨拙;为这个字段建立取值/设置函数,并且只以这些函数来访问字段
1847 0
SAP QM初阶之启用了Multiple Specification功能后检验批的不同之处?
SAP QM初阶之启用了Multiple Specification功能后检验批的不同之处?
SAP QM初阶之启用了Multiple Specification功能后检验批的不同之处?