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