我收到一个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();
}
答案 0 :(得分:3)
我在每个集合(以及每个类)上使用 batch-size
设置。点击此处查看更多信息:
如果是xml映射,请将其添加到您的包中
<bag name="Rooms" ... batch-size="50">
NHibernate将为所有已加载的父项(在上述情况中为Property
)批量加载集合...所以我们将获得1 + N / 1 + N而不是1 + N 50