使用 Dapper 将枚举存储为 Char

Store Enum as Char with Dapper

我有一个像这样的枚举:

public enum AccountStatus : byte
{
    Locked = (byte)'L',
    Active = (byte)'A',
    Deleted = (byte)'D'
}

并希望将字符值存储在数据库中。 在 Dapper 中有没有一种方法可以使用类型映射或其他方式来定义哪些枚举类型应该映射到它们的 char 值(对于 read/update/insert)?

匿名类型成员声明符也阻止我在查询中直接将 属性 转换为 char:

正如@TyCobb 在评论中提到的,这不是将 Enum 存储为 char 的问题,而是如何声明匿名类型属性的问题。

匿名类型只能推断和生成 "simple property references" 的名称,其中在分配期间不会对 属性 进行任何转换,例如

new { account.AccountStatus }

一旦您转换数据或需要重命名 属性,您必须明确声明 属性 名称:

new { Status = (char)account.AccountStatus }

关于读取,您可以通过 dapper 映射到 char,然后在 select 中转换为您的枚举(或以最合适的任何方式转换数据):

var result = connection.Query<char>(
    "select char column from table where Status = @Status", 
    new {Status = (char)account.AccountStatus}
).Select(x => (AccountStatus)x).FirstOrDefault();

此外,Dapper 还处理 AccountStatus : byte 个案例 natively,因此您可以直接 return 作为枚举的值:

var result = connection.Query<AccountStatus>(
    "select char column from table where Status = @Status", 
    new {Status = (char)account.AccountStatus}
).FirstOrDefault();