[英]Avoid N+1 Select with list of NHibernate entities
我收到由無法修改的代碼檢索到的NHibernate實體的列表。 我想從子實體中為列表中的每個項目選擇一個屬性,但是它正在為每個項目生成一個新的選擇。
如何在不更改生成傳入實體的查詢或更改映射的情況下獲取子資源(這兩者都會對不相關的代碼產生影響)。 理想情況下,我也不必在代碼的這一層創建自定義查詢。
這是一個樣本。 我的實體:
public class Property {
public IList<Room> Rooms { get; set; }
}
public class Room {
public Template Template { get; set; }
}
public class Template {
public string Name { get; set; }
}
我正在調用的函數:
public IEnumerable<string> GetTemplateNames(Property property) {
return property.Rooms.Select(room => room.Template.Name).Distinct();
}
我在每個集合(以及每個類)上使用batch-size
設置。 在這里檢查更多:
如果是xml映射,請將其添加到您的包中
<bag name="Rooms" ... batch-size="50">
NHibernate將批量加載所有加載的父項(在上述情況下為Property
)的集合...因此,我們將得到1 + N / 50而不是1 + N
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.