0

好的,在我的解决方案中,我通过将 IsDeleted 设置为 true 而不是删除实体来实现软删除。

我还在 Mapings 类中添加了 Where IsDeleted=false。

现在,我的所有选择查询都使用 where 将结果限制为那些未删除的查询。

但现在在特定查询中,我需要显示那些被删除的工具。如何在某些查询中覆盖此行为?

请帮忙。谢谢卢卡

4

2 回答 2

1

相反,我会建议您使用过滤器来实现该功能。

您可以在所有具有 IsDeleted 列的实体上启用此过滤器,然后在要搜索所有记录时显式禁用该过滤器。

它与此处描述的内容非常相似:NHibernate:创建适用于表上所有查询的条件

于 2011-07-17T20:20:49.380 回答
1

+1 过滤器非常适合这种情况,但请记住,它们不适用于多对一、一对一关联。

因此,对于类的情况,Foo如果Bar您获取Foo并且 Bar 被Bar软删除,则该实体仍将被水合。FooBarFoo.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 类似

于 2011-07-18T08:20:34.647 回答