質問: Dapper、Massive、PetaPocoなどの「マイクロ」アプローチが好きで、データベースに送るSQLを制御したいと思っています。ほとんどの場合、比較的簡単です。私はPOCOの作業も好きですが、多少柔軟なスキーマ設計を扱うときは、しばしば問題に遭遇します:) Personエンティティがあり、常に次のプロパティを持っているとしましょう。 * イド * 名 * Eメール * 電話 しかし、いくつかのケースでは、 * SpecialPhoneNumber * VeryCustomValue 私は本当にそこにあることがわかっている共通の特性を持つPOCOが本当に好きです。しかし、他のものをキー/値のコレクションでアクセス可能にしてください。 最善のアプローチは何でしょうか?そして、言及された "mirco-ormの"のいずれかがこれをサポートしていますか?私はそれらすべてを見ているが、彼らが何をしているのかわからないが、何かが足りなくなっているかもしれない。 これをSqlDataReaderで直接行うことは可能でしょうか?オブジェクトを作成するためにリフレクションを使用するときに何百行もの行を読み込むパフォーマンスが悪いのでしょうか?上記のormのすべてがかなりうまくいくように見えますが、私はその下にDataReaderを使用していると思います。 あなたが助けることを願って:) 編集:私はおそらく、我々はアプリケーションのアーキテクチャを制御することはありません言及する必要があります。これは、個々の顧客がアプリケーションと基盤となるデータベースをカスタマイズできるようにするERPソリューションです。アプリケーションにフィールドを追加すると、データベースの列が追加されます。悪い私!最初のことを明確にしていない
回答: Massiveはこれをサポートすることができます。なぜなら、 ExpandoObjectのデータにマテリアライズするからです 。 > 秘密のソースはExpandoObjectです。入ってくるすべてとMassiveから出てくるものはすべて、あなたが望むものを何でもできるようにするExpandoです。そのコアでは、ExpandoObjectは単なるIDictionary です。 > > ExpandoObjectは`IDictionary`と`IEnumerable>`実装`IDictionary`ため、必要な方法でメンバーを列挙してテストできます。 Massiveのデフォルトは`SELECT *`クエリを発行することです。そのため、ExpandoObjectには、わからないものも含めて、テーブル内のすべてのフィールドが含まれます。 Massiveの現在のコードはGithubから入手できます。 Dapperは動的オブジェクトを選択することもできますが、Massiveと異なり、データの選択、挿入、更新、削除はできません。編集:ダッパーのドキュメントを見て、それは任意のSQLを実行できるように、それは変更を実行することができます表示されます。 Dapperで挿入を実行する方法については、最近の情報があります。