2011-07-13 128 views
2

我們在使用遺留數據庫的項目中使用流利的NHibernate LINQ。 我們的場景是,我們有一個客戶信息與地址表。 我們在C#中將客戶和地址創建爲單獨的實體。地址再次引用郵政編碼對象。Fluent NHibernate Linq Complex Component Eager Loading

在映射時,我們已將地址映射爲客戶的組件。現在我想在提取客戶的同時加載Zip Code(由Address引用),以避免N + 1選擇。

當我試圖寫Fetch(customer => customer.Address.ZipCode)它說它太複雜了。我不能這樣做Fetch(customer => customer.Address).ThenFetch(address => address.ZipCode),因爲Address與Customer存儲在同一個表中。

有什麼辦法可以解決這個問題嗎?

回答

2

不幸的是,似乎Linq供應商不能處理這種情況。因此,無論您使用標準或QueryOver API

session.CreateCriteria<Customer>() 
    .SetFetchMode("Address.ZipCode", FetchMode.Eager) 
    .List(); 

session.QueryOver<Customer>() 
    .Fetch(u => u.Address.ZipCode).Eager 
    .List(); 

或者在映射

郵編的禁用惰性加載