C# 使用Nhibernate筛选与聚合根一起返回的子集合
我尝试在使用Nhibernate加载聚合根的子集合时对其进行筛选。将客户的所有已发货订单加载到客户。这可能吗?您可以公开在映射中过滤的属性,如下所示:C# 使用Nhibernate筛选与聚合根一起返回的子集合,c#,nhibernate,C#,Nhibernate,我尝试在使用Nhibernate加载聚合根的子集合时对其进行筛选。将客户的所有已发货订单加载到客户。这可能吗?您可以公开在映射中过滤的属性,如下所示: <bag name="shippedOrders" ... where="Status == 'Shipped'" > <key column="CustomerId" /> <one-to-many class="Order" /> </bag> 您可以从另一个角度看它——为客户加载
<bag name="shippedOrders" ... where="Status == 'Shipped'" >
<key column="CustomerId" />
<one-to-many class="Order" />
</bag>
您可以从另一个角度看它——为客户加载所有已发货订单
session.CreateCriteria( typeOf(Order) )
.Add( Restrictions.Eq("Shipped", shippedStatus ) )
.Add( Restrictions.Eq("Customer", requiredCustomer) )
.List<Order>();
session.CreateCriteria(typeOf(Order))
.Add(限制.Eq(“已装运”,发货状态))
.Add(限制.Eq(“客户”,requiredCustomer))
.List();
您也可以使用HQL使用session.Filter(customer.Orders,“where this.Status==‘Shipped’”)来完成此操作 ICriteria crit=session.CreateCriteria(typeof(Customer));
crit.CreateAlias(“订单”、“o”);
标准添加(Expression.Eq(“o.Status”,shippedStatus));
标准添加(Expression.Eq(“Id”,customerId));
返回crit.UniqueResult();
类似的东西。这将涉及两次加载订单,即使它们只有不同的实体
session.CreateCriteria( typeOf(Order) )
.Add( Restrictions.Eq("Shipped", shippedStatus ) )
.Add( Restrictions.Eq("Customer", requiredCustomer) )
.List<Order>();
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 <Customer>();