3

DDD の哲学に従い、集約のエンティティ オブジェクトに直接アクセスしたくありません。したがって、関連付けられたエンティティを取得するには、ルート オブジェクトを呼び出す必要があります。しかし、それ以外の場合は、ルートが呼び出されたときに、関連するすべてのエンティティをロードしたくない場合があります。それが遅延読み込みの目的ですか?

linq の遅延読み込み機能を無効にすると、関連するすべてのオブジェクトを毎回ロードせずに、ルートを介してエンティティ オブジェクトにアクセスするにはどうすればよいですか?

編集:

たとえば、ルート エンティティとして Person があり、その Person に Name、Addresses、OwnedProperties があるとします。名前を表示できるように人物のリストを取得したい場合、リポジトリへの呼び出しのたびに所有プロパティをロードする必要はありません。逆に、別のページでは、OwnedProperties のリストを表示したいが、呼び出しで他の情報をロードしたくない場合があります。その所有プロパティなしで新しい人物オブジェクトを作成する以外に、所有プロパティエンティティなしで Person を呼び出す簡単な方法は何ですか?

4

3 に答える 3

1

遅延読み込みなしではそれは不可能だと思います。

  • 一度にすべてのデータを取得する: Eager Loading
  • アクセス時にデータを取得する: 遅延読み込み
于 2009-06-05T08:33:28.170 に答える
1

あなたの編集によると:これらの状況で私がすることは、私が興味を持っているプロパティだけを含む「ビュー」クラスまたは「DTO」クラスを作成することです。たとえば、「PersonView」クラスを持つことができますたとえば、 Name プロパティがあります。

次に、OR/M マッパー (NHibernate を使用) を使用して、'Person' エンティティで機能する HQL クエリ (または基準クエリ) を作成します。クエリを実行する前に、結果として「PersonView」オブジェクトが必要であることを NHibernate に伝えます (プロジェクションを指定します)。次に、NHibernate は、PersonView インスタンスに入力するために必要な列のみを取得するクエリを実行するのに十分スマートです。

于 2009-06-05T08:43:33.610 に答える
0

遅延読み込みを回避する 1 つの方法は、オブジェクト 'id' を使用することです。

于 2014-01-04T21:42:41.020 に答える