确定, 在我的解决方案中,我通过将IsDeleted设置为true而不是删除实体来实现softdeletes。
我还在Mapings类中添加了Where IsDeleted = false。
现在我的所有选择查询都会执行,其中将结果限制为未删除的结果。
但是现在在特定查询中我需要显示那些被删除的工具。 如何在某些查询中覆盖此行为?
请帮忙。 谢谢 卢卡
答案 0 :(得分:1)
我建议您使用过滤器来实现功能。
您可以在所有具有IsDeleted列的实体上启用此过滤器,然后在您要搜索所有记录时显式禁用过滤器。
这与此处描述的完全相似:NHibernate: Creating a criteria which applies for all queries on a table
答案 1 :(得分:1)
+1过滤器的工作非常适合场景,但请记住,它们不适用于多对一,一对一的关联。
对于类Foo
和Bar
的情况,其中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
类似