Dapper QueryMultiple хранимых процедур без сопоставления с объектами
С помощью dapper я могу выполнить batch execute для хранимых процедур, что-то похожее на:
connection.Execute(@"
exec sp1 @i = @one, @y = @two
exec sp2 @i = @three",
new { one = 1, two = 2, three = 3 });
Тем не менее, единственным способом получения данных, которые я видел до сих пор, является использование
results.Read<Type>()
Что делать, если результаты не отображаются на объект? Например, я пишу "общий" код для выполнения любого SP с переменными входными / выходными параметрами и наборами результатов.
Спасибо
1 ответ
Решение
Какой API вы хотите? Если вы можете обрабатывать сетки отдельно: сделайте это:
using(var multi = connection.QueryMultiple(...))
{
while(!multi.IsConsumed) {
// ...
}
}
где ...
имеет доступ к:
Read()
заdynamic
строки - отмечая, что каждая строка также реализуетIDictionary<string,object>
Read<T>
() для типизированных строк через дженерикиRead(Type)
для типизированных строк без шаблоновRead<DapperRow
>() (на самом деле, это простоT
тотRead<T>()
использует для реализацииRead()
, но, возможно, более удобный), который обеспечивает немного больший доступ к метаданным
Если вы хотите перейти на сырой IDataReader
, сделай это:
using(var reader = connection.ExecuteReader(...)) {
// whatever you want
}
Что касается параметров: DynamicParameters
класс обеспечивает гораздо более широкий доступ к управлению параметрами, включая направление параметров и т. д.