有一個關於獲取和預先加載做使用.Fetch
NHibernate - 查詢後可能獲取集合?
實際查詢時但是,一旦我有一個加載實體SOOO許多文獻 - 用空的集合(因爲我選擇不急於負載在查詢時,由於笛卡爾產品副作用),我可以選擇稍後加載集合,比如在完成一些分頁後,我有一個具體的項目列表?
類似:
var list = (some linq over Session.Query<Entity>)
.Take(10).Skip(2)
.Fetch(x => x.MyCollection)
.ToList();
Session.Fetch<Entity>(list, l => l.OtherCollection);
編輯 的一點是 - 我已經取在查詢2個集 - 使查詢和結果集相當可觀的已經(見NHibernate的笛卡爾乘積)。我想要頁面結果,獲得10的列表,然後可選地返回到數據庫來填充分頁(10,說)結果的子集合屬性。這是性能考慮因素。
是不是隻是急於加載?即時通訊談論如何提取一個斷開的實體或一組斷開連接的實體的集合。 –
@BobTodd不知道你有沒有連接的實體。但它應該是微不足道的重新連接'session.Lock(obj,LockMode.None);'然後執行加載。 sessioncache將確保現有實體將被初始化 – Firo
看起來我們已經在我的答案中找到了同樣的東西(請參閱評論) - 如果原始查詢很昂貴並且您只想執行一次,該怎麼辦?考慮到實際的sql做到這一點,它不會很漂亮,因爲查詢必須看起來像select * from mycollection(id1,id2,id3,id4),但是對於10頁分頁結果,它的性能遠遠好於反覆運行主要查詢 –