使用Dapper填充Enum屬性

c# dapper enums

在使用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來說是一件好事。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因