質問: 私は列挙型のフィールドを含むクラスを持っています。 ``` enum myEnum { foo, bar } class myClass { ... public myClass(myEnum myField) { this.myField =myField; } public myEnum myField {get;set;} } ``` 列挙型の値は、整数ではなく、varchars(つまり 'foo'、bar ')としてデータベースに格納されます。 DapperQuery()を使用してオブジェクトにデータを取り込むことはできますが、動作させることはできません.Dapperは、myClassに適したコンストラクタを見つけられなかったと不満を持ち続けます 私はこの質問を読んだことがあります。これは 、実現したいことが可能であることを暗示しているようですが、私はどのように(Dapper 1.38を使用していますか) `TypeHandler`用の`myEnum`追加しようとしましたが、それは役に立たなかった。 私はボンネットの下に見てみるとそれがためにDapperの検索を思わ`TypeHandler` MyClassのため(に`SqlMapper.GetDeserializer()`私のように)、(任意のを見つけることができません`TypeHandler`呼び出すにmyEnum、そして進行のために定義されて`SqlMapper.FindConstructor` FindconstructorはtypeHandlerについて気にしないようです。正確に一致するものを探し、myEnumか基になる型がstringと同じ型かどうかをチェックし、そうでないと判断し、nullを返し、呼び出し元がスローします。 **編集:**上記のコードは、明示的なコンストラクタを削除する場合に機能します。
回答: わかった、私はそれを理解した。デフォルトではないコンストラクタが定義されていると、dapperはenumに対処できません。 これは、パラメータなしコンストラクタ(自動的に有効と見なされます)を処理する特別なケースをdapperが持っているのに対して、明示的なコンストラクタはタイプチェックされ、varchar - enumシナリオでは受け入れられないからです。 それが重要なのは、F#レコードタイプです。これは、既定のもののほかにコンストラクタを持つことができないため、列挙型メンバを含むときにDapperによって正しく処理されません。 この問題を解決するためのプルリクエストを提出しました。