我有一個OrderLines的集合。每個OrderLine都有一個多對一的產品。對於所有訂單,我都有一個搜索窗口 - 默認情況下 - 顯示網格中的所有訂單。使用這個相同的窗口,我可以過濾包含給定產品的所有訂單。我們的客戶每天產生約700份訂單,訂單平均約有35行。NHibernate:在詳細信息具有多對一關係的主細節中解決N + 1問題?
在searchwindow中,我只顯示存儲在Order對象本身中的信息。但是,如果我篩選特定的產品,它將初始化我的延遲加載關係到OrderLine集合以及我的OrderLine中的我的產品的多對一關係。每條訂單行都是逐行查詢,並且每行都有一個對產品表的單獨查詢。
所以我平均每次訂購35個查詢以初始化所有訂單行,再加上35個查詢以獲取與該訂單行相關聯的產品。
一次加載所有訂單行及其關聯產品的最佳方式是什麼(並且如果不可能,則每個訂單的訂單行都不可能)?我知道我可以將我的多對一映射到訂單行中的產品,作爲fetch =「join」,但這仍然會使我得到35個單一查詢來獲得訂單行+產品。
供參考:目前我加載一切懶惰。
有什麼建議嗎?我可以在這裏使用Future嗎?
問候,泰德
我不能延遲訂單的加載,因爲我需要對產品進行過濾,所以我必須獲取所有生產線,併爲每一行生產產品,然後我可以過濾ProductCode屬性。我可能會錯過你的觀點:) – TedOnTheNet 2012-04-27 08:40:11
當搜索/過濾時,我會使用NHibernate重新查詢數據庫,並且使用投影並不是所有產品都需要檢索。 – 2012-04-27 16:56:24