我有这些实体:
public class Parent
{
public int Foo { get; set; }
public Child C { get; set; }
}
public class Child
{
public string Name { get; set; }
}
我有查询从数据库中获取所有父实体。然后我将它们保存在内存中,并使用LINQ查询过滤它们。
我注意到,当我进行数据库查询时,NH会在一个查询中选择所有父实体(当然也会填充Foo属性),对于我使用LINQ访问的每个Parent,NH都会获取每个Child的信息。
如何在一个唯一的数据库中获取所需的所有信息,并在没有它的情况下使用LINQ数据来生成额外的数据库跳转?
我应该使用AliasToBeanResultTransformer吗?如果是这样,我必须创建一个存储信息的DTO,例如:
public class ParentDTO
{
public int Foo { get; set; }
public string ChildName { get; set; }
}
还是我还必须使用Parent类吗?
提前致谢
答案 0 :(得分:4)
您可以像这样(使用QueryOver语法)
急切地为此查询加载子项public IList<Parent> FindAllParentsWithChildren()
{
ISession s = // Get session
return s.QueryOver<Parent>()
.Fetch(p => p.C).Eager
.List<Parent>();
}
另一种方法是更改HBM文件以指示默认情况下急切地加载Child。然后,您无需更改查询。
答案 1 :(得分:0)
你需要告诉NHibernate不要使用延迟加载来实现Parent和Child实体之间的关系。