【问题标题】:Custom Fill Collection in NHibernateNHibernate 中的自定义填充集合
【发布时间】:2010-11-10 10:48:34
【问题描述】:

我在我的网络应用程序中使用 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) 获取一个 Company 对象并使用按生日描述排序的前 10 名员工填充 Employeers 集合?

2) 有没有办法,当收藏被填满时,只用名字和生日等一些字段来填充它?我有很多在我看来不会使用的属性。我可以为此创建一个 DTO,但我不知道该怎么做!

谢谢

【问题讨论】:

    标签: nhibernate hql dto


    【解决方案1】:

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

    【讨论】:

    • 您好 Diego,感谢 awser。好吧,它会正常工作,我想象过这样的事情。我会做的。但我很好奇,有没有办法与公司进行相同的hql查询? Future 是一个不错的选择吗?我正在使用 NH 2.1
    • 你已经有了公司,还需要它做什么?之后只需将其添加到 DTO 即可。无论如何,如果您真的想这样做,只需将 Company 添加到选择列表和 DTO 中即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多