2

我的类看起来像这样(我只包括相关的属性):

public class Order 
{
   public virtual Customer Customer { get; set; }
   public virtual IEnumerable<OrderLine> OrderLines { get; set; }
}

public class OrderLine 
{
   public virtual string Product { get; set; } // Simplified
}

现在我想要的是创建一个分离标准,为给定客户选择所有订单,同时只检索每个订单的前 10 个 OrderLine。第一部分很简单:

Customer someCustomerObject = ...;
var criteria = DetachedCriteria.For<Order>().Add(Restrictions.Eq("Customer", someCustomerObject);

但是我如何指示 NHibernate 急切地检索由上述标准检索到的每个订单的前 10 个订单行?

我尝试使用基于以下示例的过滤器(取自 Nhibernate 文档):

session.CreateFilter( lazyCollection, "").SetFirstResult(0).SetMaxResults(10).List();

但是当我给Order.OrderLinesCreateFilter方法时,它首先检索所有订单行,然后检索前 10 个订单行,这不是我想要的。我还尝试将其与呼叫结合起来NHibernateUtil.Initialize,但无济于事。

如何为这个问题创建一个独立的标准?或者,如果这不完全可能,我如何只检索每个订单的前 10 个结果,而不获取整个集合?

4

1 回答 1

0

您可以batch-size在 Order 类的 NHibernate 映射文件中将该属性设置为 10。这样,它会急切地加载集合的前 10 个元素并延迟加载其余元素。我将按如下方式映射集合:

<set name="OrderLines" table="OrderToOrderLine" batch-size="10">
    <key column="OrderId"/>
    <one-to-many class="OrderLine"/>
</set>

更多信息,请继续阅读:NHibernate 映射 - 集合

于 2010-12-20T05:32:41.170 回答