31

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

4

1 に答える 1

44

確かに - あなたの列挙型が同意する限り、つまり

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 としては良いことです。

于 2011-05-22T06:38:00.973 に答える