Использование Dapper для заполнения свойств Enum - PullRequest
30 голосов
/ 22 мая 2011

При использовании функции 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?

1 Ответ

41 голосов
/ 22 мая 2011

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

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 во всем вашем коде, что хорошо для IMO.

...