Передать выходные параметры в шаблоне объекта в Dapper
У меня есть хранимые процедуры с параметрами ввода и вывода. У меня есть отдельные классы для классов ввода и вывода. Итак, я хочу создать динамические параметры, используя шаблоны объектов вместо добавления каждого свойства.
Например:
public class StudentInput {
public StudentInput() {
this.StudentId = 1;
}
public int StudentId {get; set}
}
public class StudentOutput {
public string StudentName {get; set;}
public string FavSubject {get; set;}
public int Grade {get; set;}
public int YearOfJoining {get; set;}
}
У меня есть хранимая процедура [SP_GetStudentData]
он принимает StudentId в качестве входных данных и возвращает StudentName, FavSubject, Grade и YearOfJoining.
Используя Dapper, я написал следующий код.
DynamicParameters ip = new DynamicParameters(new StudentInput());
DynamicParameters op = new DynamicParameters(new StudentOutput());
ip.AddDynamicParameters(op);
// Here is the question. How do I tell Dapper that op is a output parameters object? How do I add ParameterDirection output to each of the properties in this object?
SqlMapper.ExecuteSP(connection, SP_GetStudentData, ip, CommandType.StoredProcedure)
1 ответ
Проблема в том, что SQL Server может возвращать только скалярный объект в качестве выходных параметров. Таким образом, вы не можете отобразить выходной параметр в ваш StudentOutput
учебный класс. Просто верните нужные вам значения в качестве набора результатов (используя инструкцию SELECT внутри SP), а затем сопоставьте этот набор результатов с вашим классом.
var result = connection.Query("SP_GetStudentData @studentId", new { studentId = (new StudentInput()).StudentId }, commandType:StoredProcedure)