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 是不是支持枚举?的主要内容,如果未能解决你的问题,请参考以下文章

dapper nuget 1.7 枚举映射

Dapper 封装01-操作符枚举

从 dapper 中的多个查询返回可枚举的结果

Spring Data MongoDB 是不是支持枚举?

scikit-learn 决策树是不是支持无序(“枚举”)多类特征?

C语言怎样取得枚举型的名字 而不是值