我有一个类似的枚举:
public enum AccountStatus : byte
{
Locked = (byte)'L',
Active = (byte)'A',
Deleted = (byte)'D'
}
并希望将char值存储在数据库中。 有没有一种方法在Dapper中使用类型映射或以其他方式定义哪些枚举类型应该映射到它们的char值(用于读取/更新/插入)?
匿名类型成员声明符也阻止我直接在查询中将属性转换为char:
答案 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();