2009-06-05 15 views
2

這個問題可能是這其中的一個副本:如何禁用NHibernate中的自動加載?

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

我想知道是否有任何方式告訴NHibernate的做不加載子集(最好的,如果它與功能NHibernate)除非我用查詢手動執行(保留所有映射!)。

問題是,即使關閉延遲加載集合也會自動加載。我希望沒有集合被加載,除非我在查詢中指定了fetchmode。

回答

1

正如您從問題和答案中看到的那樣,您可以通過使關係單向化來達到此目的。所以,而不是直接回答如何,我要問爲什麼希望得到更好的「如何」。

我明白爲什麼你不會總希望集合被熱切地抓取,這就是爲什麼NHibernate有惰性加載(以及爲什麼NHibernate總是懶惰加載集合,除非你預先獲取)。直到你真正要求它,NHibernate纔會真正獲取該集合。所以我的問題是爲什麼你希望NHibernate在你操作時不加載集合?當你訪問實體上的子集時,你希望NHibernate做什麼?

更新:

你並沒有真正回答我爲什麼(也許我只是固執),但精,你要控制的問題。那麼保證NH完成其工作的最簡單方法就是不要讓它這樣做(即不要映射它)。也就是說,不要映射關係的「多」(集合)結束。你仍然可以將集合保存在你的類中,但只要你沒有告訴NHibernate通過將它添加到映射文件來填充它,它永遠不會。然後,您可以在某處添加PopulateCollection方法來運行NH查詢並將結果存儲在該集合中。你失去了NHibernate爲集合提供的所有漂亮的語義,因爲它不能跟蹤對它的更改;你必須實現你自己的Add和Remove方法。

所以,基本上David Kemp對另一個問題的回答。

+1

原因很簡單,我想手動控制什麼得到加載和什麼不是。不想讓查詢引擎進入數據庫。另外,在我調試的時候讓實體被加載的時候非常煩人。 如果我在未加載的集合上運行,我期望一個空的異常。 – Drevak 2009-06-06 07:30:04

相關問題