代码之家  ›  专栏  ›  技术社区  ›  Felipe Oriani

NHibernate定制填充集合

  •  0
  • Felipe Oriani  · 技术社区  · 15 年前

    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; }
    }
    

    附言:这不是真正的模型,但它适用于我的样品/疑虑。。。

    1) 得到一个公司的对象,并填写由生日说明前10名雇员的雇员学院?

    谢谢

    1 回复  |  直到 15 年前
        1
  •  2
  •   Diego Mijelshon    15 年前

    持久的集合和实体表示当前的状态;它们不能只是其中的一部分(想想:如果它们是,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>();
    }