我有一个父/子关系,我在XML中进行映射。预订可以有很多付款,因此我的预订模型有一个IList付款{get; set;}属性,我将其映射为XML格式如下:
<bag name="Payments" inverse="true">
<key column="BookingId"/>
<one-to-many class="Payment, NHibernateOneToMany"/>
</bag>
这很好用,但现在我需要介绍一个软删除的概念,所以我在Payment上添加了一个Deleted bool列,我希望Booking上的Payments只包含未删除的,所以我想做这样的事情:
<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 :(得分:3)
您可以使用行李贴图的简单where
。如果Deleted
是付款的映射属性,则此映射应该有效:
<bag name="Payments" inverse="true" where="Deleted = 0">
<key column="BookingId"/>
<one-to-many class="Payment, NHibernateOneToMany"/>
</bag>