NHibernate中的自定义填充集合

时间:2010-11-10 10:48:34

标签: nhibernate hql dto

我在我的网络应用程序中使用NHibernate,它与我的数据库映射。我有一个模特,像这样:

public class Company {
   public virtual string Name { get; set; }
   public virtual IList<Employee> Employeers { get; set; }
}

public class Employee {
   public virtual string Name { get; set; }
   public virtual DateTime Birthday { get; set; }
   /* other properties */
   public virtual Company Company { get; set; }
}
PS:它不是真正的模型,但它适用于我的样品/怀疑......

我正在使用HQL来获取我的对象,我想知道是否有任何方法:

1)获取公司对象并填写Employeers Colletion,其中包括生日描述订购的前10名员工?

2)有没有办法,当收集集合时,只填写一些字段,如姓名和生日?我有很多属性,我不会在视图中使用。我可以为此创建一个DTO,但我不知道该怎么做!

由于

1 个答案:

答案 0 :(得分:2)

持久集合和实体代表当前状态;他们不能只参与其中的一部分(想一想:如果他们这样做,NH会如何跟踪变化?)

因此,在这两种情况下,答案都是查询和DTO。您可以使用HQL轻松检索所需的数据:

class EmployeeNameAndBirthDay
{
    public string Name { get; set; }
    public DateTime Birthday { get; set; }
}

public IList<EmployeeNameAndBirthDay> GetTopEmployees(Company company)
{
    return session.CreateQuery(@"
                   select Name as Name,
                          Birthday as Birthday
                   from   Employee
                   where  Company = :company
                   order by Birthday desc
                   ")
                  .SetParameter("company", company)
                  .SetMaxResults(10)
                  .SetResultTransformer(
                      Transformers.AliasToBean<EmployeeNameAndBirthDay>())
                  .List<EmployeeNameAndBirthDay>();
}