使用Nhibernate过滤使用Aggregate Root返回的子集合

我正在尝试使用Nhibernate加载聚合根的子集合。 向客户加载已发货的所有订单。 这可能吗?

好吧,您可以公开在地图中过滤的属性,如下所示:

    

‘where’属性是任意SQL。

从理论上讲,您可以拥有Customer,Orders和ShippedOrders这两个属性。 但是,我应该说我没有这样做,我想测试NH在这种情况下如何处理级联。 在任何情况下,添加/删除新项目时都必须注意将它们正确添加/删除到两个集合中。

您想要这样做的事实让我们想知道Order是否是聚合根。 从长远来看,这可能不那么麻烦:

 orderRepository.GetOrders(int customerId, OrderStatus[] statuses) 

你可以用另一种方式来看待它 – 为客户加载所有已发货的订单。

 session.CreateCriteria( typeOf(Order) ) .Add( Restrictions.Eq("Shipped", shippedStatus ) ) .Add( Restrictions.Eq("Customer", requiredCustomer) ) .List(); 

你也可以使用session.Filter(customer.Orders,“where this.Status ==’Shipped’”)使用HQL。

 ICriteria crit = session.CreateCriteria (typeof(Customer)); crit.CreateAlias ("Orders", "o"); crit.Add (Expression.Eq ("o.Status", shippedStatus)); crit.Add (Expression.Eq ("Id", customerId)); return crit.UniqueResult (); 

类似的东西。