質問: (StatusTypes)o.StatusID }; SqlMapper.Configure.ForTypeUseFunc(fooFunc); cnn.Query... ``` したがって、DapperがIDataReaderを 'Foo'型に分割すると、すべての値が`fooFunc`動的値として`fooFunc` 、結果的に 'Bar'に対して同じ結果が得られます。渡された '動的な'オブジェクトは、分割された列を表しています(通常のマルチマップと同じように、列名が重複する可能性があります)。 どうすればこれを達成できますか? **バックグラウンド** いくつかのレガシーデータベースではDapperを広く使用していますが、古いパターンが多いため、結果をオブジェクト(異なるカラム名、ネストされたオブジェクトなど)にマッピングするために動的出力を使用する必要があります。 現実には、マニュアルマッピングを書き留めていますが、データベース(私たちの制御外にある)と私たちのオブジェクトとの間の不一致はFuncで完全に明示的に定義されています。私は中規模と考えている50テーブルのデータベースは、マップするのに数時間しかかからず、開発の時間のほんの一部を占めています。 それは良い部分です。 私たちが苦労しているのは、使用すると完全に動作するにもかかわらず、コードからのコードの再利用を困難にしていることです。理想的には、Dapperのマルチマップを使用する方法がありますが、タイプごとのFuncを割り当てることができます。 私はITypeMapとIMemberMapを調べました。それらはフィールド単位でカスタムマッピングに対応しているようです。私たちは本当にタイプごとにカスタムマッピングを探しています(そして、割り当てを扱います)。 私はこれをDapper自身に組み込むことを嬉しく思っています(過去には少し貢献しています)が、いくつかの指針を愛するでしょう。 ありがとう! **更新** 私は現在`Query`試みていますが、それは適切に分割されていません。これが適切に分割された場合、これは私たちのために働くことができます。各ダイナミックを効果的に関数にプラグインし、強く型付けされたオブジェクトを返すことができます: ``` Query>((d1,d2)=>Tuple.Create(fooFunc(d1),barFunc(d2))); ```
回答: Dapperは、複数の`dynamic`タイプに分割するのに十分なほど卑劣です。私たちが望む目標を達成するために使用できる多くの裏側実装があります。以下は1つです。 ``` Query>((d1,d2)=>Tuple.Create(fooFunc(d1),barFunc(d2))); ``` それは素晴らしいことです。背後では、タイプ/機能を意味のあるもの(例えば、辞書)に保存することができます。 ここで扱っている問題は、重複する列名に数値(たとえばAddressID、AddressID1)が付加されているため、「SELECT *」文がそれほど役に立たないということです。