使用Dapper填充Enum属性

时间:2011-05-22 05:17:39

标签: 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()来填充包含枚举类型属性的类?

1 个答案:

答案 0 :(得分:41)

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

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

然后它会自动完成。

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

或者,如果枚举为: int并且无法更改,请将其强制转换为SQL:

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

或者最后,使用dynamic API:

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

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