我在我的網頁有幾個下拉菜單。這些鏈接並具有類似的雙向鏈接類結構。nhibernate3查詢 - 收藏與收藏
換句話說:類Alpha有一個類Beta的列表,而類又有一個類Charlie的列表。每個Beta類也有它自己的Alpha列表(它所屬的列表),每個類Charlie都有它自己的Beta列表。
我使用的NHibernate 3與流利的nhibernate和automappings。
現在。如果我只是運行一個
session.CreateCriteria<Alpha>().SetMaxResults(1000).List<Alpha>();
我收到N + 1的問題,當我循環的集合。
我看到它的方式如下SQL的應該是所有與查詢到數據庫
select top 1000 * from Alpha
select top 1000 * from Beta
select top 1000 * from Charlie
select * from Alpha2Beta
select * from Beta2Charlie
但是我怎麼寫這個工作查詢?
您在Alpha和Beta,Beta和Charlie之間有雙向關係 - 您如何期望只查詢這三個表?必須有鏈接表來實現這個... – 2012-01-05 10:37:43
哦,我很傻,你絕對是對的!我將更新文本 – Ivar 2012-01-05 11:17:48
聽起來像您正在使用無狀態會話。 StatelessSession沒有緩存 - 並且無狀態會話中的對象不能延遲加載。這意味着您將無法預取組件並執行組合查詢。如果是這種情況 - 您需要在查詢中使用.Fetch()以便從Alpha2Beta和Beta2Charlie中加載子對象。你仍然會有一些重複 - 但並不像N + 1那麼糟糕。 – Origin 2012-01-05 15:54:02