web-dev-qa-db-ja.com

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()を使用して、列挙型であるプロパティを含むクラスに入力する方法はありますか?

31
Slaggg

確かに-列挙型が同意する限り、つまり.

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

その後、すべて自動的に機能します。

(この制限は仕様によるものであり、発生時にLINQ-to-SQLと共有されます)

または、列挙型が: intであり、変更できない場合は、SQLでキャストします。

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

または最後に、dynamicAPIを使用します。

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

1つ目は、すべてのコードでbyteデータ型の制限を適用するため、私の好みのオブジェクトです。これはIMOにとって良いことです。

41
Marc Gravell