我有两个模型:
public class StudentModel
{
public int Student_Id {get;set;}
public string Student_Name {get;set;}
public int Class_Id {get;set;}
}
public class ClassModel
{
public int Class_Id {get;set;}
public string Class_Name {get;set;}
}
我想从两个表中返回值。我的返回值应该是多少?
public ?? GetStudentClass(StageModel model)
{
using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["LO"].ConnectionString))
{
string getstudent= $"select * from student s,class c where s.classid = c.classid and s.studentid = @studentid;";
DynamicParameters parameter = new DynamicParameters();
parameter.Add("@studentid", model.Student_Id, DbType.Int64);
connection.Open();
result = connection.Execute(getstudent, parameter);
}
}
我应该使用SQL的输出,使用定义的模型进行打印。
答案 0 :(得分:0)
似乎您正在使用Dapper进行工作。但是,属性名称和数据库字段名称之间有区别。这使使用Dapper的工作更加困难,因此,我建议更改属性以匹配数据库字段中的名称。
通过此更改,您可以由Dapper自动填充课程
首先,您的StudentModel需要具有在类中声明的ClassModel的实例
public class StudentModel
{
public int StudentId {get;set;}
public string StudentName {get;set;}
public int ClassId {get;set;}
public ClassModel StudentClass {get;set;}
}
public class ClassModel
{
public int ClassId {get;set;}
public string ClassName {get;set;}
}
现在您以这种方式更改方法
public StudentModel GetStudent(StageModel model)
{
using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["LO"].ConnectionString))
{
string getstudent= @"SELECT s.*, c.ClassId, c.ClassName
FROM student s
INNER JOIN class c on s.classid = c.classid
WHERE s.studentid = @studentid;";
DynamicParameters parameter = new DynamicParameters();
parameter.Add("@studentid", model.Student_Id, DbType.Int64);
connection.Open();
result = connection.Query<StudentModel, ClassModel, StudentModel>
(getstudent, ((s, c) => { s.ClassModel = c; return s;}),
splitOn:"ClassId", parameter);
return result;
}
}
Dapper将为您创建 StudentModel 实例和 ClassModel 实例,并在遇到 ClassId 字段时知道如何填充这两个实例。
lambda表达式将接收Dapper创建的两个实例,您只需要在lambda接收到的StudentModel中设置ClassModel即可。
此方法遵循您的问题所给人的印象,即学生和班级之间存在1:1的关系。当然,如果关系为1:N,并且在 StudentModel 类
中需要一个 List ,问题就更复杂了。