NHibernate过滤器不适用于Session.Get

时间:2009-03-04 18:39:54

标签: .net nhibernate

我正在尝试实现一个Soft-deletable存储库。通常,使用Delete Event侦听器可以轻松完成此操作。要过滤掉已删除的实体,我可以在我的类映射中添加 Where 属性。但是,我还需要在该实体的存储库中实现另外两种方法:恢复清除。恢复将“取消删除”实体,清除将硬删除它们。这意味着我不能使用Where属性(因为它阻止了软删除的实体到任何访问)

我尝试使用过滤器。我可以创建一个过滤器并在会话中启用或禁用它以获得相同的结果。但问题是过滤器对Session.Get方法没有任何影响(它们只影响基于ICriteria的访问)。

关于如何解决这个问题的任何想法?

由于

2 个答案:

答案 0 :(得分:2)

Fabio Maulo引用:

  

按设计。过滤器不能使用Get或Load,因为它们意味着:我想要   使用此ID加载实体。

     

动态过滤器使用HQL / Criteria和Collection(启用时)   对于集合)仅在使用显式连接时,或者更一般地,   当过滤器的QuerySpace与查询的QuerySpace匹配时。

答案 1 :(得分:0)

IInterceptor会为此工作吗?

查看EmptyInterceptor我发现它有一个OnLoad,我认为你可以使用它来拦截对象加载。