NHibernate:在通过聚合根处理子集合时避免完整的内存中集合

时间:2011-05-01 08:46:16

标签: nhibernate

考虑下面的简化类,我们假设:

  • 父母可以有相对大量的孩子(例如1000)
  • 子集合是延迟加载的
  • 我们已经从ParentRepository的标准Get方法通过它的Id加载了一个父级,现在将读取OldestChild属性
class Parent 
{
       public IList<Child> Children { get; set; }

       public Child OldestChild 
       {
         get { return Children.OrderByDescending(c => c.Age).FirstOrDefault();
       }

}

使用NHibernate和Repositories时,是否有一些最佳实践方法可以满足两者:

  • a)应该通过聚合根(父)选择最老的孩子 - [即。不通过例如独立查询子表。使用父ID的ChildRepository] ​​

  • b)应避免将整个子集合加载到内存中(理想情况下,最老的子查询应由DB处理)

这似乎既可能又容易,但我没有看到实现它的明显方法。可能我错过了什么?

我正在使用NHibernate 2.1,所以解决方案很好,虽然很快就会升级到3。

2 个答案:

答案 0 :(得分:2)

我会在您的存储库上创建一个专门的方法,它返回给定父级的最老的子级。

答案 1 :(得分:2)

您可以使用公式映射OldestChild。看一下这个,将一个类映射到一个公式:http://blog.khedan.com/2009/01/eager-loading-from-formula-in.html