En utilisant la fonction Query () de Dapper, j'essaie de remplir une classe qui possède une propriété qui est une valeur énumérée. Dans ma base de données, cette colonne est stockée sous la forme d'un octet. Cependant, dans la classe, ils sont une énumération. Dans l'ancienne approche ADO.NET, je convertirais pendant la boucle de lecture:
myClass.myEnum = (MyEnumType) reader.GetByte(2);
Lors de l'utilisation de Dapper, je n'arrive pas à comprendre comment effectuer cette conversion. Par exemple quand je fais quelque chose comme
myClass = conn.Query<MyClassType>("SELECT ... ")
Je reçois une erreur du type
Error parsing column 2 (myEnum=1 - Byte)
Existe-t-il un moyen d'utiliser Deryer Query () pour remplir une classe contenant des propriétés qui sont des types enum?
Bien sûr - tant que votre enum est d'accord, c.-à-d.
enum MyEnumType : byte {
Foo, Bar, Blip, ...
}
alors tout fonctionnera automatiquement.
(cette limitation est par conception et partagée avec LINQ-to-SQL en l'état)
Alternativement, si l'énumération est : int
et ne peut pas être modifiée, lancez-la dans le SQL:
SELECT ..., CAST(x.myEnum as int) as myEnum, ...
Ou enfin, utilisez l'API dynamic
:
foreach(var row in conn.Query(...)) { // note no <T>
T obj = new Item { /* copy from row */ };
...
}
Le premier est mon objet préféré, car il impose la limitation du type de données en byte
dans tout votre code, ce qui est une bonne chose pour IMO.