Передать выходные параметры в шаблоне объекта в Dapper - PullRequest
0 голосов
/ 01 мая 2018

У меня есть хранимые процедуры с параметрами ввода и вывода. У меня есть отдельные классы для классов ввода и вывода. Итак, я хочу создать динамические параметры, используя объекты шаблона вместо добавления каждого свойства.

Например:

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 Ответ

0 голосов
/ 05 мая 2018

Проблема в том, что SQL Server может возвращать только скалярный объект в качестве выходных параметров. Таким образом, вы не можете отобразить выходной параметр в ваш класс StudentOutput. Просто верните нужные вам значения в качестве набора результатов (используя инструкцию SELECT внутри SP) и затем сопоставьте этот набор результатов с вашим классом.

var result = connection.Query("SP_GetStudentData @studentId", new { studentId = (new StudentInput()).StudentId }, commandType:StoredProcedure)
...