Чтение подмножества таблицы с использованием Dapper в C # - PullRequest
0 голосов
/ 11 сентября 2018

Я использую Dapper в проекте, и это нормально, если мне нужно получить либо один тип примитива (int, decimal, string и т. Д.), Либо любой объект db, но мне нужно прочитать только 2 столбца из таблицы, и здесь я столкнулся с множеством проблем:

Это простой запрос:

SELECT col1, col2 FROM Table1

Где я ожидаю получить строку и int

И вот как я читаю данные после выполнения запроса:

var field1 =  (await result.ReadAsync<string, int>()).FirstOrDefault();

И это не компилируется. Я попытался создать класс, который содержит 2 поля: строку и int и использовать этот тип вместо. Так что это приводит к следующей коррекции:

var field1 =  (await result.ReadAsync<MyData>()).FirstOrDefault();

class MyData
{
string...

int ...
}

и он компилируется, но я получаю нулевое значение для строки и правильные данные для int.

Сам запрос правильный, я его проверил и все нормально. Итак, вопрос в том, как читать 2 столбца?

1 Ответ

0 голосов
/ 11 сентября 2018

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

Итак, ваш класс MyData должен выглядеть примерно так:

class MyData
{
    string col1...
    int col2...
}

В случае, если имена ваших свойств должны отличаться, вам нужно изменить запрос, чтобы использовать псевдоним столбца, например, как показано ниже:

SELECT col1 AS MyProperty1, col2 AS MyProperty2 FROM Table1

Также обратите внимание, что в случае сложного запроса / сопоставления имя таблицыдолжен совпадать с вашим именем класса POCO / Entity.

Есть способы переопределить отображение по умолчанию.Пожалуйста, обратитесь к этому вопросу для детального обсуждения картирования Даппера.

...