博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
由Dapper QueryMultiple 返回数据的问题得出==》Dapper QueryMultiple并不会帮我们识别多个返回值的顺序...
阅读量:5712 次
发布时间:2019-06-17

本文共 3027 字,大约阅读时间需要 10 分钟。

异常汇总:

今天帮群友整理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 = @idselect * from Orders where CustomerId = @idselect * from Returns where CustomerId = @id"; using (var multi = connection.QueryMultiple(sql, new {id=selectedId})) { var customer = multi.Read
().Single(); var orders = multi.Read
().ToList(); var returns = multi.Read
().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的,现在得出省了。。。。立刻,马上。。。

 

附录:

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
();//类不见得一定得和表名相同 //var QQModelList = multi.Read
(); //var SeoTKDList = multi.Read
(); 动态类型 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 } } }

  

 

转载于:https://www.cnblogs.com/dunitian/p/5221058.html

你可能感兴趣的文章
3. 指针的赋值
查看>>
linux小常识
查看>>
SQL中使用WITH AS提高性能 使用公用表表达式(CTE)简化嵌套SQL
查看>>
聊聊TaskExecutor的spring托管
查看>>
oracle 强行杀掉一个用户连接
查看>>
Git提交本地库代码到远程服务器的操作
查看>>
挨踢部落故事汇(13):扬长避短入行Oracle开发
查看>>
灾难拯救——让软件项目重回轨道
查看>>
ssh链接git服务器,解决push pull要求输入密码问题
查看>>
也说 Java 异常处理
查看>>
Netty 源码解析(二):对 Netty 中一些重要接口和类的介绍
查看>>
MAVEN spring boot 打包 和执行
查看>>
mysql中主外键关系
查看>>
第七章:数据字典
查看>>
python 字符串 类型互相转换 str bytes 字符串连接
查看>>
service mysqld start
查看>>
linux时间
查看>>
Spring+Mybatis项目中通过继承AbstractRoutingDataSource实现数据库热切换
查看>>
让Alert弹窗只弹出一次
查看>>
Berkeley DB 源代码分析 (1) --- 代码特征与游标的实现
查看>>