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

如何为特定类型的NHibernate查询添加默认WHERE条件,hibernate,nhibernate,Hibernate,Nhibernate,我希望所有查询特定类型的查询都默认包含where语句 更确切地说,我有一个接口IIsTenantSpecific,带有一个属性TenantId——因此实体属于一个租户 当我查询实现此接口的类型时,NHIberante应该始终添加WHERE子句,过滤TenantId NHibernate中是否有一种机制(如拦截器或事件侦听器)可以轻松实现这一点?我想说的是,这种情况可以通过内置功能轻松实现: 相似的 引用文件: NHibernate增加了预定义筛选条件和附加的功能 这些过滤器同时位于类和集合级别。

我希望所有查询特定类型的查询都默认包含where语句

更确切地说,我有一个接口IIsTenantSpecific,带有一个属性TenantId——因此实体属于一个租户

当我查询实现此接口的类型时,NHIberante应该始终添加WHERE子句,过滤TenantId


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

我想说的是,这种情况可以通过内置功能轻松实现:

相似的

引用文件:

NHibernate增加了预定义筛选条件和附加的功能 这些过滤器同时位于类和集合级别。过滤器 标准是定义非常相似的限制条款的能力 指向类上现有的“where”属性和各种 集合元素。除此之外,这些过滤条件可以 参数化。然后,应用程序可以在运行时做出决定 是否应启用给定的筛选器及其参数 价值观应该是正确的。过滤器可以像数据库视图一样使用,但是 在应用程序内部参数化

为了使用过滤器,必须先定义过滤器,然后再附加过滤器 到相应的映射元素。要定义过滤器,请使用
元素中的
元素:

<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");