簡體   English   中英

避免使用NHibernate實體列表進行N + 1選擇

[英]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設置。 在這里檢查更多:

父母不同的NHibernate標准可負擔所有孩子嗎?

如果是xml映射,請將其添加到您的包中

<bag name="Rooms" ... batch-size="50">

NHibernate將批量加載所有加載的父項(在上述情況下為Property )的集合...因此,我們將得到1 + N / 50而不是1 + N

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM