先查看一下Dapper的源码,SqlMapper类; 使用这类的泛型方法:
可以看出SqlMapper类对IDbConnection做出了拓展方法,并针对不同的关联数量实现了不同的重载方法。
其中First、 Second、 Third.........等等泛型参数代表需要关联的对象。可以看出最多可以传入6个泛型参数,支持到TFifth, 也就是最多支持到关联五个表。
相对于单表查询,主要多了一个Func<>泛型内置委托,委托类型与方法泛型参数一致,映射对应关系的逻辑代码应该写在这个泛型委托中
一路f12就可以跟踪到这个委托最终调用的地方
默认是以id为分隔列,如果不是id,可设定splitOn: "xx"参数,Query方法体内最多支持六个参数,其中最后一个是返回参数,所以最多支持五个表的映射
public List<Procure> Get(string userInfo_No)
{
object parm = new { userInfo_No };
string sql = "select procurebak.* ,'' as id,thing.*,'' as id,warehouse.*,'' as id,factory.* from procurebak left join thing on procurebak.thing_No=thing.t_No left join warehouse on warehouse.wh_No=procurebak.warehouse_No left join Factory on factory.f_No=procurebak.factory_No where procurebak.userInfo_No=@userInfo_No order by procurebak.p_Key desc";
using (var db = ConnectionFactory.GetOpenConnection())
{
List<Procure> dt = db.Query<Procure,Thing,WareHouse,Factory,Procure>(sql,(procurebak,thing,warehouse,factory)=> {
procurebak.thing = thing;
procurebak.wareHouse = warehouse;
procurebak.factory = factory;
return procurebak;
},parm).ToList();
return dt;
}
}
- 本文标题: Dapper之多表映射关联读取数据
- 文章分类:【.NET/Web】
- 非特殊说明,本文版权归【胡同里的砖头】个人博客 所有,转载请注明出处.