c# - 使用 Dapper 填充枚举属性

标签 c# enums dapper

在使用 Dapper 的 Query() 函数时,我试图填充一个具有枚举值属性的类。在我的数据库中,此列存储为一个字节。但是,在类里面,它们是一个枚举。在旧的 ADO.NET 方法中,我会在读取器循环期间进行转换:

myClass.myEnum = (MyEnumType) reader.GetByte(2);

在使用 Dapper 时,我不知道如何进行这种转换。例如当我做类似的事情时

myClass = conn.Query<MyClassType>("SELECT ... ")

我得到一个类型的错误

Error parsing column 2 (myEnum=1 - Byte)

有没有办法使用 Dapper 的 Query() 来填充包含枚举类型属性的类?

最佳答案

当然 - 只要您的枚举同意,即

enum MyEnumType : byte {
    Foo, Bar, Blip, ...
}

然后它会自动工作。

(此限制是设计使然,并在发生时与 LINQ-to-SQL 共享)

或者,如果枚举是 : int 且无法更改,则将其转换为 SQL:

SELECT ..., CAST(x.myEnum as int) as myEnum, ...

或者最后,使用动态 API:

foreach(var row in conn.Query(...)) { // note no <T>
    T obj = new Item { /* copy from row */ };
    ...
}

第一个是我的首选对象,因为它在所有代码中强制执行 byte 数据类型限制,这在 IMO 中是一件好事。

关于c# - 使用 Dapper 填充枚举属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6086216/

相关文章:

c# - 将图像转换为字节流

c# - Umbraco CMS : How to make a hit counter

C++ 枚举与 unsigned int 比较

java - 结合 Java 枚举和点语法 (enum.value1.value2)?

join - Petapoco 的 multimapping 可以处理多个 JOIN 吗?

c# - 如何使用 Dapper 高效地选择聚合对象?

c# - 使用属性包装方法 C#

c# - 如何从 HttpWebResponse 中提取信息?

java - 是否可以以兼容的方式更改可序列化类的某些字段的类型?

c# - 如何使用 Dapper 从 oracle 读取时间偏移量