如何为某种类型的NHibernate查询添加默认的WHERE条件

时间:2016-12-12 05:34:06

标签: hibernate nhibernate

我喜欢查询某种类型的所有查询,默认情况下包含where语句。

更确切地说,我有一个界面IIsTenantSpecific,具有属性TenantId - 所以实体属于单个租户。

当我查询实现此接口的类型时,NHIberante应该总是添加一个WHERE子句,过滤TenantId。

NHibernate中是否有一种机制(如拦截器或事件监听器)可以轻松实现这一点?

1 个答案:

答案 0 :(得分:4)

我想说,内置功能可以轻松涵盖这种情况:

18.1. NHibernate filters

类似Q & A

来自 doc 的引用:

  

NHibernate增加了预定义过滤条件和附加功能   那些类和集合级别的过滤器。一个过滤器   标准是非常类似地定义限制条款的能力   到现有的“where”属性可用于类和各种   集合元素。除了这些过滤条件可以   参数。然后,应用程序可以在运行时做出决定   是否应启用给定的过滤器以及它们的参数   价值应该是。过滤器可以像数据库视图一样使用,但是   在应用程序内参数化。

     

为了使用过滤器,必须首先定义它们然后再附加它们   到适当的映射元素。要定义过滤器,请使用   <filter-def/>元素中的<hibernate-mapping/>元素:

<filter-def name="myFilter">
    <filter-param name="myFilterParam" type="String"/>
</filter-def>
     

然后,此过滤器可以附加到类:

<class name="MyClass" ...>
    ...
    <filter name="myFilter" condition=":myFilterParam = MY_FILTERED_COLUMN"/>
</class>
     

或者,到一个集合:

<set ...>
    <filter name="myFilter" condition=":myFilterParam = MY_FILTERED_COLUMN"/>
</set>

因此,一旦我们定义了一个过滤器,并将其应用于我们的集合 - 我们以后可以随时轻松地在整个会话中启用该过滤器:

session.EnableFilter("myFilter").SetParameter("myFilterParam", "some-value");

从那一刻起,每个集合都会在选定列

上通过“some-value”进行过滤
相关问题