Есть ли элегантный способ передать объект или коллекцию объектов в виде табличного параметра с помощью Dapper? - PullRequest
2 голосов
/ 02 мая 2019

Я просто пачкаю свои руки Даппером и люблю его простоту.Мне нравится, что я могу легко сопоставить результаты процедуры SELECT с классом, что было затруднительно в прямом ADO и излишнем использовании EF.

Теперь я пытаюсь выяснить, как лучше всего пройтиДругой способ - взять экземпляр того же класса и передать его обратно в хранимую процедуру для выполнения и UPDATE или INSERT.

Я знаю, что Dapper поддерживает табличные параметры, что хорошо, но все, что я вижутам предполагается, что я сначала должен создать коллекцию DataTable или SqlDataRecord.Достаточно легко создать вспомогательный класс, который достигнет этого, но мне это кажется неуклюжим.Лучший способ?

1 Ответ

1 голос
/ 02 мая 2019

Прямо сейчас: нет, не совсем. Тем не менее, я заинтересован в том, чтобы выяснить, можем ли мы что-то сделать, распознавая что-то вроде массивов значений-кортежей, чтобы это работало:

var args = new {
    id = 1, name = "abc",
    someTVP = new[] {
        (1, "abc", 42),
        (6, "def", 84),
    });
... use args with dapper

(обратите внимание, что это было бы строго позиционно - любые имена на сайте вызова не видны получателю, фундаментальное ограничение для кортежей-значений)

Но: чтобы подчеркнуть, нет: этого не существует сегодня. Ваша лучшая ставка DataTable.

...