NHibernate和“匿名”实体

时间:2011-06-09 17:37:01

标签: nhibernate entity

我有这些实体:

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类吗?

提前致谢

2 个答案:

答案 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实体之间的关系。