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 класс обеспечивает гораздо более широкий доступ к управлению параметрами, включая направление параметров и т. д.

Другие вопросы по тегам