NHibernate 将过滤器应用于包

NHibernate apply filter to bag

我在 XML 中映射了一个 parent/child 关系。一个 Booking 可以有很多付款,所以我的 Booking 模型有一个 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>

我研究过使用过滤器,但它们似乎只提供在启用时使用过滤器的功能 - 我希望这个 属性 每次都能排除所有已删除的项目,所以不会出错可以下线。

实现此目标的最佳方法是什么?

您可以使用包映射的简单where。如果 Deleted 是付款上的映射 属性,则此映射应该有效:

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