使用Dapper将Enum存储为Char

时间:2017-03-28 20:46:00

标签: c# enums dapper

我有一个类似的枚举:

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

并希望将char值存储在数据库中。 有没有一种方法在Dapper中使用类型映射或以其他方式定义哪些枚举类型应该映射到它们的char值(用于读取/更新/插入)?

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

enter image description here

1 个答案:

答案 0 :(得分:3)

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

匿名类型只能推断并生成“简单属性引用”的名称,其中在赋值期间不对属性进行转换,例如

new { account.AccountStatus }

只要转换数据或需要重命名属性,就必须显式声明属性名称:

new { Status = (char)account.AccountStatus }

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

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,因此您可以直接将该值作为枚举值返回:

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