google dapper 多表查詢的用法


  以前用習慣了ef,現在的公司的基礎框架是用大名鼎鼎的google開源類庫Dapper為基礎開發,但是還沒有完善。在開發過程中被多表聯查折騰的很慘。  

  在此記錄下自己摸着石頭過河實驗出的結果。

  新建連個類,對應數據庫中新建兩個表

public class Profile
{
    public int ID { get; set; }

    public string Name { get; set; }

    public string Phone { get; set; }

    public string Address { get; set; }

    public ExtraInfo Extra { get; set; }
}

public class Topic
{
    public int ID { get; set; }

    public string Title { get; set; }

    public DateTime CreateDate { get; set; }

    public string Content { get; set; }

    public int UID { get; set; }

    public int TestColum { get; set; }

    public string Name { get; set; }

    public Profile Author { get; set; }

    public Attachment Attach { get; set; }
}


對應與項目中的代碼如下:
var sql = @"select * from Topic as T inner join Profile P on T.UID = P.ID";
var list = conn.Query<Topic, Profile, Topic>(
           sql,
            (T, P) => {return T; },
            null,
            null,
            true,
            "ID");

相信大家對上邊的代碼再熟悉不過,很簡單,關鍵就在與splitOn這個參數,到底是什么意思?翻遍了博客園的帖子,都是一些蜻蜓點水的嘗試,而且都是抄襲的統一個人的。
splitOn到底是什么意思?這個參數中的值是用逗號分隔的,用來划分查詢中的字段是屬於哪個表,也就是查詢結構映射到哪個實體。
  上邊的代碼中的splitOn是ID,運行時,會從查詢結果所有字段列表的最后一個字段開始進行匹配,一直到找到Id這個字段(大小寫忽略),找到的第一個ID字段匹配Topic類的ID屬性,那么從ID到最后一個字段都屬於Topic,ID以前的字段都被影射到Profile 通過 (T, P) => {return T; },把兩個類的實例解析出來。
  嘗試了很多次,看了n多的文章,最終在一篇老外的論壇中看到有人請教,有人這么教的。果斷如獲至寶的實驗一下,成功了。
實際通過mssql2008監視工具查詢,此查詢兩次產訊數據,不知道是什么原因,可能是懶加載的原因,后續在研究。


免責聲明!

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



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