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 */ };
...
}
1つ目は、すべてのコードでbyte
データ型の制限を適用するため、私の好みのオブジェクトです。これはIMOにとって良いことです。