私はDapperマイクロOR/Mに本当に感銘を受けています。私は本当にそれをいくつかの本格的なOR/Mのサイド・バイ・サイド・コンパニオンとして使用したいと思います。それの代わりに。とにかく、データベースから階層を非直列化する戦略があれば、私は決して分かりませんでした。たとえば、レコードセット行の返されるオブジェクトは、フィールドに依存します(たとえば、NHの 'discriminator'と呼ばれます)。さらに、階層は結合を介してより多くのテーブルを分割することができるので、行を表すタイプは他のテーブルのレコードの存在に依存します。上記の2つの戦略の混在によって表される階層を持つことは、例えばNHがサポートしていないものであるが、それは「リレーショナル・ライフ」に存在する。だから質問:完全に本格的なOR/Mを置き換えるためにdapperを使用しています
- Dapperはこのようなシナリオを処理しますか?
- このシナリオでは、パフォーマンス面でDapperの努力が無駄になりますか?
もう1つのトピックはキャッシュです。クエリ用のDapperキャッシュは多少積極的ですが、「セッションのようなコンテキスト」を持ち、各セッションのクエリキャッシュを持っている方が良いわけではないでしょうか、これが再びDapperの主な動機を傷つけますか?私たちは本当にこのような問題を解決するために持っていなかった私たちは、このようなロジックの原因を実装に対して決め
class Post {}
class Question : Post { .. }
class Answer : Post { ... }
Func<IDbDataReader, Func<IDbDataReader, Post>> factoryLocator
= ... my magic factory locater;
cnn.Query<Post>(@"
select * from Posts p
left join Questions q on q.Id = p.Id
left join Answers a on a.Id = p.Id", factoryLocator: factoryLocator);
:Dapperのは、カスタムの建設・ロジックをサポートしていない現時点では
ありがとうございます!私は、キャッシュを使用することに同意し、さらにコードを使用して、別のコードを実際に必要としないコードを探します。私は次のプロジェクトでNHからdapperに移ってしまうと、デシリアライザから注入されたパラメータを持つPOCO上に静的メソッドを持っている可能性があるので、解決しようとします。 –
個人的に私はこの場合のためにコンベンション上の工場ロケータの明示を好む –
これは少しパフォーマンスを傷つけませんか? –