nhibernate softdelete在哪里覆盖

时间:2011-07-17 13:37:08

标签: nhibernate soft-delete

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

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

现在我的所有选择查询都会执行,其中将结果限制为未删除的结果。

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

请帮忙。 谢谢 卢卡

2 个答案:

答案 0 :(得分:1)

我建议您使用过滤器来实现功能。

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

这与此处描述的完全相似:NHibernate: Creating a criteria which applies for all queries on a table

答案 1 :(得分:1)

+1过滤器的工作非常适合场景,但请记住,它们不适用于多对一,一对一的关联。

对于类FooBar的情况,其中Bar被软删除,Foo指向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

类似