2009-06-05 11 views
2

この質問はこの1つの複製であるかもしれない:私は(それが流暢NHibernateはとかどう最良の)子コレクションをロードしないためにNHibernateはを伝えるためにどのような方法があるかどうかを知りたいのですがNHibernateの自動ロードを無効にするにはどうすればいいですか?

nhibernate - disable automatic\lazy loading of child records for one to many relationsihps

私はそれを手動でクエリ(すべてのマッピングを維持する!)をしない限り。

問題は、レイジーローディングをオフにしても、コレクションは自動的にeager-loadedになるということです。私は私のクエリでfetchmodeを指定しない限り、コレクションがロードされないようにしたいと思います。

答えて

1

あなたがリンクしている質問と回答からわかるように、関係を一方向にすることでこれを達成することができます。だから直接に返答するのではなく、どのように私はより良い方法になることを望んで尋ねるつもりです。

私は間違いなくコレクションが熱心にフェッチされることを望んでいないと思うので、なぜNHibernateが遅延読み込みをしているのですか?(プリフェッチしない限り、NHibernateは常にコレクションを読み込みません。あなたが実際にそれを求めるまで、NHibernateは実際にそのコレクションをフェッチしません。だから私の質問なぜ NHibernateはあなたがそれを操作しているときにコレクションを読み込まないようにしたいですか?エンティティの子コレクションにアクセスするときにNHibernateが何をしたいのですか?

更新:

あなたが本当になぜ(多分私はちょうど頑固されています)が、罰金、あなたがコントロールしたいの私の質問に答えませんでした。 NHがその仕事をしないようにする最も簡単な方法は、最初にそうするよう指示することではありません(つまり、マップしないでください)。つまり、関係の「多くの」(コレクション)の終わりをマッピングしないでください。クラスにコレクションを残しておくことはできますが、NHibernateにマッピングファイルにそれを追加するようにNHibernateに指示していない限り、これは決して行いません。次に、PopulateCollectionメソッドを追加してNHクエリを実行し、そのコレクションに結果を格納することができます。 NHibernateがコレクションのために提供するすばらしいセマンティクスはすべて失われてしまいます。なぜなら、それが変更を追跡することができないからです。独自のAddメソッドとRemoveメソッドを実装する必要があります。

だから、基本的にDavid Kempさんの答えは他の質問です。

+1

理由は簡単です。私はロードされるものとロードされないものを手動で制御したいと考えています。フードの下でデータベースにクエリを送ることを望まないでください。また、私がデバッグしている間、エンティティに遅延ロードをさせるのは非常に面倒です。 ロードされていないコレクションで操作している場合、null例外が発生すると思います。 – Drevak

関連する問題