NHibernate将过滤器应用于袋

NHibernate将过滤器应用于袋,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我有一个用XML映射的父/子关系。一个预订可以有许多付款,因此我的预订模型有一个IList payments{get;set;}属性,我将它映射到XML中,如下所示: <bag name="Payments" inverse="true"> <key column="BookingId"/> <one-to-many class="Payment, NHibernateOneToMany"/> </bag> <bag name="P

我有一个用XML映射的父/子关系。一个预订可以有许多付款,因此我的预订模型有一个IList payments{get;set;}属性,我将它映射到XML中,如下所示:

<bag name="Payments" inverse="true">
  <key column="BookingId"/>
  <one-to-many class="Payment, NHibernateOneToMany"/>
</bag>
<bag name="Payments" inverse="true">
  <key column="BookingId"/>
  <one-to-many class="Payment, NHibernateOneToMany"/>
  <sql>SELECT * FROM Payment WHERE Deleted = 0 AND BookingId = bookingId</sql>
</bag>

这很好,但现在我需要引入软删除的概念,因此我在付款中添加了一个已删除的bool列,我希望预订付款只包含未删除的付款,所以我想做如下操作:

<bag name="Payments" inverse="true">
  <key column="BookingId"/>
  <one-to-many class="Payment, NHibernateOneToMany"/>
</bag>
<bag name="Payments" inverse="true">
  <key column="BookingId"/>
  <one-to-many class="Payment, NHibernateOneToMany"/>
  <sql>SELECT * FROM Payment WHERE Deleted = 0 AND BookingId = bookingId</sql>
</bag>

从付款中选择*,其中已删除=0且BookingId=BookingId
我已经研究过如何使用过滤器,但它们似乎只有在启用时才提供使用过滤器的功能-我希望此属性每次都排除所有已删除的项目,这样就不会出现错误


实现这一点的最佳方法是什么?

您可以使用行李映射的简单
where
。如果
Deleted
是付款上的映射属性,则此映射应起作用:

<bag name="Payments" inverse="true" where="Deleted = 0">
  <key column="BookingId"/>
  <one-to-many class="Payment, NHibernateOneToMany"/>
</bag>

您可以使用行李映射的简单
where
。如果
Deleted
是付款上的映射属性,则此映射应起作用:

<bag name="Payments" inverse="true" where="Deleted = 0">
  <key column="BookingId"/>
  <one-to-many class="Payment, NHibernateOneToMany"/>
</bag>