Utilisation de Dapper pour remplir les propriétés Enum

c# dapper enums

Question

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?

Réponse acceptée

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.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi