半柔軟性のあるスキーマ設計を持つデータベースで使用するORM

c# dapper orm petapoco sql

質問

Dapper、Massive、PetaPocoなどの「マイクロ」アプローチが好きで、データベースに送るSQLを制御したいと思っています。ほとんどの場合、比較的簡単です。私はPOCOの作業も好きですが、多少柔軟なスキーマ設計を扱うときは、しばしば問題に遭遇します:)

Personエンティティがあり、常に次のプロパティを持っているとしましょう。

  • イド
  • Eメール
  • 電話

しかし、いくつかのケースでは、

  • SpecialPhoneNumber
  • VeryCustomValue

私は本当にそこにあることがわかっている共通の特性を持つPOCOが本当に好きです。しかし、他のものをキー/値のコレクションでアクセス可能にしてください。

最善のアプローチは何でしょうか?そして、言及された "mirco-ormの"のいずれかがこれをサポートしていますか?私はそれらすべてを見ているが、彼らが何をしているのかわからないが、何かが足りなくなっているかもしれない。

これをSqlDataReaderで直接行うことは可能でしょうか?オブジェクトを作成するためにリフレクションを使用するときに何百行もの行を読み込むパフォーマンスが悪いのでしょうか?上記のormのすべてがかなりうまくいくように見えますが、私はその下にDataReaderを使用していると思います。

あなたが助けることを願って:)

編集:私はおそらく、我々はアプリケーションのアーキテクチャを制御することはありません言及する必要があります。これは、個々の顧客がアプリケーションと基盤となるデータベースをカスタマイズできるようにするERPソリューションです。アプリケーションにフィールドを追加すると、データベースの列が追加されます。悪い私!最初のことを明確にしていない

受け入れられた回答

Massiveはこれをサポートすることができます。なぜなら、 ExpandoObjectのデータにマテリアライズするからです

秘密のソースはExpandoObjectです。入ってくるすべてとMassiveから出てくるものはすべて、あなたが望むものを何でもできるようにするExpandoです。そのコアでは、ExpandoObjectは単なるIDictionary <string、object>です。

ExpandoObjectはIDictionary<string, Object>IEnumerable<KeyValuePair<string, Object>>実装IDictionary<string, Object>ため、必要な方法でメンバーを列挙してテストできます。

MassiveのデフォルトはSELECT *クエリを発行することです。そのため、ExpandoObjectには、わからないものも含めて、テーブル内のすべてのフィールドが含まれます。

Massiveの現在のコードはGithubから入手できます。

Dapperは動的オブジェクトを選択することもできますが、Massiveと異なり、データの選択、挿入、更新、削除はできません。編集:ダッパーのドキュメントを見て、それは任意のSQLを実行できるように、それは変更を実行することができます表示されます。 Dapperで挿入を実行する方法について、最近の情報があります。


人気のある回答

あなたは、nHibernateの動的マッピングを見てみることができます。

http://ayende.com/blog/3942/nhibernate-mapping-dynamic-component

このような拡張プロパティを汎用Directory<string,object>に取り出すことができます。したがって、そのような一般的なバッグ(辞書)を持つクラスを持ち、動的にXMLマッピングを拡張します。

nHibernateがあなたのために残りを行います。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ