2011-07-27 4 views
0

私は1対多数のマッピングを持っています。親オブジェクトを取得しようとすると、マッピングで遅延ロードを停止しても、子オブジェクトも表示されます。私は親オブジェクトだけを取得し、子オブジェクトは取得しません。どうすればいいですか?親オブジェクトを取得するために流暢なnhibernateを使用

+0

HTH、どんなにセッションがアクティブなときは、子オブジェクトにアクセスする場合は、遅延ロードについてNHibernateのを言うこと、それ意志怠惰な負荷の子オブジェクト。セッションがアクティブでない間にアクセスすると、例外が発生して失敗します... – sinelaw

+0

他の方法はありますか?少なくとも私の子オブジェクトのnullリストを取得することができますか? –

+0

NHinbernateでは、accessというパラメータが1対多の関係の「片側」に設定され、クラスから子プロパティが削除されます。 – Filip

答えて

0

なぜあなたはそれらを必要としない場合、子供にアクセスしますか?怠惰なコレクションは、アクセスしないと初期化されません。ポストロードイベントで次のようなものがあるかもしれません:

var pc = Parent.Childs as IPersistentCollection; 
if (pc != null && !pc.WasInitialized) 
    Parent.Childs = null; 
+0

私は実際に取得された親オブジェクトを使用して、他のいくつかの子要素をsession.saveorupdate(Parent、child)を使って保存しています。以前に保存された子要素も取得された場合、問題を引き起こしています。 –

1

コードをデバッグするときに、レイジーローディングを引き起こしているようです。

あなたは、これはその後、何を意味するのかわからない場合はこれを理解してみてください。 -

  1. あなたが親
  2. Visual Studioはブレークポイント
  3. にヒット取得し、あなたのコード
  4. にブレークポイントを置きます
  5. 子がロードされているかどうかを調べる
  6. ビジュアルスタジオデバッガが子供を検索して取得します< - これが遅延ロードの原因となります。これをVSで観察すると、遅延ロードが強制されます。

それでもわからない場合は、log4netのを経由してSQLプロファイラ、利用ログを追加したり、NHProf(30日間の無料)をダウンロードして生成されたSQLを参照して、ブレークポイントがあってもなくてもしてください、あなたがします違いを参照してください。私の経験から

関連する問題