Dapper 多表关联查询
首先有3个实体类,对应着数据库里面的字段
/// <summary>
/// 学生
/// </summary>
public class Student {
public int ID { get; set; }
public string Name { get; set; }
public int GradeID { get; set; }
public int InformationID { get; set; }
}
/// <summary>
/// 班级
/// </summary>
public class Grade {
public int ID { get; set; }
public string Name { get; set; }
}
/// <summary>
/// 重要信息,通过加密进行存储
/// </summary>
public class Information {
public int ID { get; set; }
public string IDCard { get; set; }
public string Phone { get; set; }
}
然后进行查询的SQL语句
SELECT * FROM Student LEFT JOIN Grade ON Grade.ID = Student.GradeID LEFT JOIN Information ON Information.ID = Student.InformationID
在Dapper里面进行如何将多张表取出呢?
第一种方法
建立一个新的 model
public class StudentViewModel {
public Student Student { get; set; }
public Grade Grade { get; set; }
public Information Information { get; set; }
}
这样就取出来了
var studentViews = connection.Query<Student,Grade,Information,StudentViewModel>(sql,(student,greade,information)=>
{
var obj = new StudentViewModel();
obj.Student=student;
obj.Grade=greade;
obj.Information=information;
return obj;
},splitOn:"ID");
解释一下Query的参数 <> 里面前面几个是你的实体类 最后一个是你要输出的类型,然后委托里面是你是你实体类的数量,对应着你的每个实体类。splitOn: 根据哪个字符进行分割, 简单的说就是你每个实体在数据库查询出来的第一列。这里因为每个都是ID开头的,所以写一个ID就可以了,如果有多个的话使用 , 隔开 例如 “ID,Name”.
第二种方法
var studentViews = connection.Query<Student,Grade,Information,(Student,Grade,Information)>(sql,(student,greade,information)=>
{
return (student,greade,information);
},splitOn:"ID");
emmmmm , dotnet core 里面可以使用, framework 的话好像不支持这种语法.