【问题标题】: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);

【问题讨论】:

    标签: c# orm dapper


    【解决方案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);
    猜你喜欢
    • 2012-12-03
    • 2011-03-10
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 2017-04-02
    • 2023-02-07
    相关资源
    最近更新 更多