質問: HasMany関係をプログラムで無視しますか? こちらの質問にフォローアップの質問があります。 私はSilverlightとWCFを使用していますが、lazyloadingはオプションではありません。 HasMany関係をプログラムで無視して、パフォーマンスを向上させることができますか? (私はちょうど関連するバーのないFooのが欲しい)。
回答: 基本的に、あなたがやろうとしていることはNHibernateでもFluentでも可能ではありません。 *「時々ロードする、時にはない」*というマッピングを持つことはできません。 `Not.LazyLoad()`を設定すると、 **show stopper** になります。 - NHibernateは常にコレクションを読み込みます。 でこれらの種類の最適化(*読み込み、時には*)が適している場合があります。 DAO の一部です。例えば、あなたの `FooDao` クラスは次のようになります: ``` public class FooDao { public IList GetFoosEagerly() { //load all Foos first; then all Bars for every Foos var foos = session.QueryOver().List(); foreach (var foo in foos) { NHibernateUtil.Initialize(foo.Bars); } return foos; } public IList GetFooPerformanceCritical() { return session.QueryOver().List(); } } ``` ( `Not.LazyLoad()`を使用して **not** のような標準的なマッピングを使用して)最初のメソッドは、Barsコレクションが完全に設定されたFoosを返します(NHibernateにロード今、私たちが戻る前に)。しかし、2番目のオブジェクトは `Foo` オブジェクトを**のみ**返します。単一の `Bar` はロードされません。代わりに、Hibernateはすべての `Foo` のBarsコレクションの代わりにプロキシオブジェクトを生成します。 WCFサービスは、このようなDAOオブジェクトを内部的に使用できます。当然のことながら、単一のFooを読み込むための同様のメソッドを持つことができます。 結論は簡単です。マッピングだけでは問題の解決には役立ちません。余分なコーディング作業をする必要がありますが、間違いなく可能です。