好的,在我的解决方案中,我通过将 IsDeleted 设置为 true 而不是删除实体来实现软删除。
我还在 Mapings 类中添加了 Where IsDeleted=false。
现在,我的所有选择查询都使用 where 将结果限制为那些未删除的查询。
但现在在特定查询中,我需要显示那些被删除的工具。如何在某些查询中覆盖此行为?
请帮忙。谢谢卢卡
好的,在我的解决方案中,我通过将 IsDeleted 设置为 true 而不是删除实体来实现软删除。
我还在 Mapings 类中添加了 Where IsDeleted=false。
现在,我的所有选择查询都使用 where 将结果限制为那些未删除的查询。
但现在在特定查询中,我需要显示那些被删除的工具。如何在某些查询中覆盖此行为?
请帮忙。谢谢卢卡
相反,我会建议您使用过滤器来实现该功能。
您可以在所有具有 IsDeleted 列的实体上启用此过滤器,然后在要搜索所有记录时显式禁用该过滤器。
它与此处描述的内容非常相似:NHibernate:创建适用于表上所有查询的条件
+1 过滤器非常适合这种情况,但请记住,它们不适用于多对一、一对一关联。
因此,对于类的情况,Foo
如果Bar
您获取Foo并且 Bar 被Bar
软删除,则该实体仍将被水合。Foo
Bar
Foo.Bar
当您包含类似的逻辑时,这是有问题的
if (Foo.Bar != null) {
//will never execute
}
您可以通过对库进行微不足道的更改来更改此行为,我在 http://savale.blogspot.com/2010/01/enabling-filters-on-mapped-entities.html上写了一篇文章,展示了如何做那。它描述了 v2.1.2 的操作,但它与 v3.0+ pf NHibernate 类似