Подтвердить что ты не робот

Использование Dapper для заполнения свойств Enum

При использовании функции Dapper Query() я пытаюсь заполнить класс, у которого есть свойство, которое является перечисляемым значением. В моей базе данных этот столбец хранится в виде байта. Однако в классе они являются перечислением. В старом подходе ADO.NET я бы конвертировал во время цикла чтения:

myClass.myEnum = (MyEnumType) reader.GetByte(2);

При использовании Dapper я не могу понять, как это сделать. Например, когда я делаю что-то вроде

myClass = conn.Query<MyClassType>("SELECT ... ")

Я получаю ошибку типа

Error parsing column 2 (myEnum=1 - Byte)

Есть ли способ использовать Dapper Query() для заполнения класса, содержащего свойства, которые являются типами перечислений?

Спасибо.

4b9b3361

Ответ 1

Конечно - пока ваше перечисление соглашается, то есть

enum MyEnumType : byte {
    Foo, Bar, Blip, ...
}

тогда все будет работать автоматически.

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

Альтернативно, если перечисление : int и не может быть изменено, введите его в SQL:

SELECT ..., CAST(x.myEnum as int) as myEnum, ...

Или, наконец, используйте API dynamic:

foreach(var row in conn.Query(...)) { // note no <T>
    T obj = new Item { /* copy from row */ };
    ...
}

Во-первых, это мой предпочтительный объект, так как это ограничивает ограничение типа данных byte по всему вашему коду, что является хорошей ошибкой IMO.