我希望所有查询某种类型的查询所有查询,默认情况下包括一个语句。
更确切地说,我有一个特定于属性的界面特有界面 - 因此该实体属于一个租户。
当我查询某种植入该接口的类型时,Nhiberante应始终添加一个在其中的子句,过滤tenantid。
nhibernate中是否有一个机制(例如拦截器或事件听众)可以轻松地?
我会说,这种情况很容易被内置功能覆盖:
18.1。NHIBERNATE过滤器
类似的Q&
doc 的引用:
nhibrenate增加了预定过滤标准并附加的能力 这些过滤在班级和收集水平上。过滤器 标准是定义限制条款非常相似的能力 到现有的" 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");
从那时起,每个集合都被选定的列上传递的"某个值"过滤