在使用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, ...
或者最后,使用
dynamic
API:foreach(var row in conn.Query(...)) { // note no <T>
T obj = new Item { /* copy from row */ };
...
}
第一个是我的首选对象,因为它在所有代码中强制执行
byte
数据类型限制,这对IMO来说是一件好事。关于c# - 使用Dapper填充Enum属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6086216/