Использование 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() для заполнения класса, содержащего свойства, которые являются типами перечислений?
Спасибо.
Ответы
Ответ 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.