怠惰な読み込みは可能ですか?そして汎用(POCO)APIと動的APIの違いは何ですか?

c# dapper

質問

私はdapperで作業することに関して2つの質問があります:

  1. entity-framework(lazy-loading)のようなナビゲーションキーのプロパティをロードする方法はありますか?

  2. POCO serializationdynamic serialization POCO serializationの違いは何ですか?それは良いですか?このシリアル化を使用するにはどうすればよいですか?

受け入れられた回答

entity-framework(lazy-loading)のようなナビゲーションキーのプロパティをロードする方法はありますか?

いいえ、Dapperは直接SQLライブラリなので、それはとてもばかげて高速です。自動ローディングのオーバーヘッドはありません。ただし、一度に複数のエンティティを読み込むことはできます。

POCOのシリアル化と動的なシリアル化の違いは何ですか?それは良いですか?このシリアライゼーションはどのように使用できますか?

型がコンパイル時によく知られているので、POCOの直列化はより効率的です。動的直列化は、実行時に評価する必要があるため、少し高価です。それ以外には違いはありません。

しかし、私はDapperを他のすべてのライブラリのどこにでも置くことを推奨します。シンプルで、速く、非常に柔軟です。そして私を信じて、私はデータアクセスのために多くのフレームワークとライブラリを使用しました。

Dapperのドキュメント

マルチマッピング複数の結果を見てください


エキスパート回答

1:いいえ。あなたが完全にあなた自身を転がしていない限り、全くありません。それは意図的に最小限で決定論的です

2:POCOへのマテリアライズは、そのデータをアプリケーションの他の部分、たとえばビューモデルのデータとして公開したい場合に便利です。たとえば、 Query<Customer>は、他の場所でコーディングできるよく知られたCustomerオブジェクトを作成することができます。 dynamicは非常に便利ですが 、非常に探索的ではなく、データバインディングやインテリセンスではうまく機能しません。しかし、非常にローカルに残っているDALメソッドや、

var row = conn.Query("select qty, cost from parts where id = @id",
    new { id }).Single();
int qty = row.qty;
decimal cost = row.cost;
// and off we go...

または:

var lookup = conn.Query("select id, name from somelookup").ToDictionary(
      x => (int)x.id, x => (string)x.name);


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