由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的,現在得出省了。。。。立刻,馬上。。。

 

附錄:

            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
                    }

                }
            }

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM