Dapper 是不是支持枚举?
Posted
技术标签:
【中文标题】Dapper 是不是支持枚举?【英文标题】:Does Dapper support Enums?Dapper 是否支持枚举? 【发布时间】:2013-05-10 10:46:28 【问题描述】:我有一个 User 类,其中 Role 是枚举值:Employee、Admin 等... Dapper 抛出异常:“System.Enum 类型的成员 Role 不能用作参数值”
dapper 是否支持枚举?
IDbConnection connection
connection.Execute(sb.ToString(), entityToInsert, /*transaction: transaction*/tx, commandTimeout: commandTimeout);
【问题讨论】:
【参考方案1】:支持枚举,但不支持Enum
:p
如果你有:
class User
public MemberRole Role get;set;
那应该可以正常工作;然而
class User
public Enum Role get;set;
不会。您可能在使用后者吗?
【讨论】:
是的,我使用最后一个,但是 MemberRole 应该是什么样子呢? MemberRole : enum ... 是吗? 啊。我明白你的意思了。谢谢它对我有用!你帮了我很多 @Sergey 只是public enum MemberRole Employee, Admin, ...
。您应该从不通常使用Enum
- 这实际上效率很低。你应该只使用类型化的枚举。
@Sergey 具体来说:MemberRole
类型的字段本质上是一个int
- 每个User
4 个字节。 Enum
类型的字段是对 MemberRole
的盒装副本的引用 - 引用 (x86/x64) 的 4/8 字节加上 8/16 字节的字节对象标头 (x86/x64),加上 MemberRole
的 4 个字节,考虑到 12/24 字节的最小对象大小 - 突然间而不是 4 个字节已经花费了 16/32 字节 (x86/x64)。除非您使用反射,否则切勿使用Enum
。 并且你也为垃圾收集器做了不必要的工作!
@crush 不,我认为这只是成功投射,就像在 C# 中一样 - 即obj.Foo = (SomeEnum)reader.GetInt32(5);
以上是关于Dapper 是不是支持枚举?的主要内容,如果未能解决你的问题,请参考以下文章