繁体   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