正如您從問題和答案中看到的那樣,您可以通過使關係單向化來達到此目的。所以,而不是直接回答如何,我要問爲什麼希望得到更好的「如何」。
我明白爲什麼你不會總希望集合被熱切地抓取,這就是爲什麼NHibernate有惰性加載(以及爲什麼NHibernate總是懶惰加載集合,除非你預先獲取)。直到你真正要求它,NHibernate纔會真正獲取該集合。所以我的問題是爲什麼你希望NHibernate在你操作時不加載集合?當你訪問實體上的子集時,你希望NHibernate做什麼?
更新:
你並沒有真正回答我爲什麼(也許我只是固執),但精,你要控制的問題。那麼保證NH完成其工作的最簡單方法就是不要讓它這樣做(即不要映射它)。也就是說,不要映射關係的「多」(集合)結束。你仍然可以將集合保存在你的類中,但只要你沒有告訴NHibernate通過將它添加到映射文件來填充它,它永遠不會。然後,您可以在某處添加PopulateCollection
方法來運行NH查詢並將結果存儲在該集合中。你失去了NHibernate爲集合提供的所有漂亮的語義,因爲它不能跟蹤對它的更改;你必須實現你自己的Add和Remove方法。
所以,基本上David Kemp對另一個問題的回答。
原因很簡單,我想手動控制什麼得到加載和什麼不是。不想讓查詢引擎進入數據庫。另外,在我調試的時候讓實體被加載的時候非常煩人。 如果我在未加載的集合上運行,我期望一個空的異常。 – Drevak 2009-06-06 07:30:04