我在我的网络应用程序中使用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,但我不知道该怎么做!
由于
答案 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>();
}