J'ai un enum comme:
public enum AccountStatus : byte
{
Locked = (byte)'L',
Active = (byte)'A',
Deleted = (byte)'D'
}
et souhaiterait stocker les valeurs de caractère dans la base de données. Existe-t-il un moyen dans Dapper avec les mappes de types ou de définir quels types d'énumération doivent être mappés sur leurs valeurs de caractères (pour read / update / insert)?
Le déclarateur de membre de type anonyme m'empêche également de convertir la propriété en un caractère directement dans la requête:
Comme mentionné par @TyCobb dans les commentaires, il ne s'agit pas d'un problème de stockage d'un Enum en tant que caractère, mais plutôt de la manière dont les propriétés de type anonyme sont déclarées.
Les types anonymes ne peuvent déduire et générer que des noms pour des "références de propriétés simples" où aucune transformation n'est effectuée sur la propriété lors de l'affectation, telle que
new { account.AccountStatus }
Dès que vous transformez les données ou que vous devez renommer la propriété, vous devez explicitement déclarer le nom de la propriété:
new { Status = (char)account.AccountStatus }
En ce qui concerne lit, vous pouvez mapper à un char
par pimpant, puis jeté comme ENUM dans votre sélection (ou transformer les données de quelque façon la plus appropriée):
var result = connection.Query<char>(
"select char column from table where Status = @Status",
new {Status = (char)account.AccountStatus}
).Select(x => (AccountStatus)x).FirstOrDefault();
En outre, Dapper gère également AccountStatus : byte
cas nativement , vous pourrez peut - être revenir directement la valeur que votre ENUM:
var result = connection.Query<AccountStatus>(
"select char column from table where Status = @Status",
new {Status = (char)account.AccountStatus}
).FirstOrDefault();