テーブルをPOCOに変換するためにPetaPocoを試しています。
私のテーブルには、という名前の列がありますTheEnum
。この列の値は、次の列挙型を表す文字列です。
public enum MyEnum
{
Fred,
Wilma
}
文字列「Fred」を値に変換しようとすると、PetaPoco がチョークしMyEnum
ます。
GetConverter
メソッドの次の行でこれを行います。
Convert.ChangeType( src, dstType, null );
ここで、src
は「フレッド」 (a string
) であり、dstType
はtypeof(MyEnum)
です。
例外は、InvalidCastException
と言ってInvalid cast from 'System.String' to 'MyEnum'
何か不足していますか?最初に登録しなければならないものはありますか?
GetConverter
メソッドに以下を追加することで問題を回避しました。
if (dstType.IsEnum && srcType == typeof(string))
{
converter = delegate( object src )
{
return Enum.Parse( dstType, (string)src ) ;
} ;
}
明らかに、このデリゲートをすべての行で実行したくはありません。処理が大幅に遅くなるからです。この列挙型とその値をディクショナリに登録して高速化することもできますが、このようなものが既に製品に組み込まれている可能性が高いと思われます。
それで、私の質問は、列挙型を PetaPoco に登録するために何か特別なことをする必要がありますか?
2012 年 2 月 23 日更新
しばらく前にパッチを提出しましたが、まだ取り込まれていません。使用したい場合は、パッチを見て自分のコードにマージするか、ここからコードだけを入手してください。