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

c# dapper enums

Вопрос

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

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

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

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

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

Error parsing column 2 (myEnum=1 - Byte)

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

Принятый ответ

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

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

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

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

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

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

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

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

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



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему