Usando Dapper para poblar las propiedades de Enum

c# dapper enums

Pregunta

Al usar la función Dapper's Query (), estoy intentando completar una clase que tiene una propiedad que es un valor enumerado. En mi base de datos, esta columna se almacena como un byte. Sin embargo, en la clase, son una enumeración. En el viejo enfoque de ADO.NET, convertiría durante el ciclo de lectura:

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

Cuando uso Dapper, no puedo entender cómo hacer esta conversión. Por ejemplo, cuando hago algo como

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

Me sale un error del tipo

Error parsing column 2 (myEnum=1 - Byte)

¿Hay alguna manera de usar Dapper's Query () para completar una clase que contiene propiedades que son tipos enum?

Respuesta aceptada

Claro, siempre y cuando su enum esté de acuerdo, es decir

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

entonces todo funcionará automáticamente.

(esta limitación es por diseño y se comparte con LINQ-to-SQL a medida que ocurre)

Alternativamente, si el enum es : int y no se puede cambiar, ejecútelo en el SQL:

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

O finalmente, use la API dynamic :

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

El primero es mi objeto preferido, ya que eso impone la limitación del tipo de datos de byte en todo tu código, lo que es bueno para la OMI.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow