【问题标题】:NHibernate filter not workingNHibernate 过滤器不工作
【发布时间】:2023-03-21 17:56:01
【问题描述】:

我想要做的是:http://www.janblaha.net/blog/nhibernate-multitenancy-in-shared-database

这是我的过滤器定义:

public class MultitenancyFilter : FilterDefinition
    {
        public MultitenancyFilter()
        {
            WithName("multitenancy").WithCondition("TenantId= :tenantId").AddParameter("tenantId", NHibernate.NHibernateUtil.Int32);
        }
    }

然后,我这样查询:

_session.EnableFilter("multitenancy").SetParameter("tenantId", tenantId);
var people = _session.QueryOver<Person>().List().ToList();

其中的tenantId 是一些整数。

但是 NHibernate 永远不会在查询中生成过滤器。查询的生成完全没有“where”子句。

我是否缺少某些配置或某些概念?

NHibernate 版本 4.0.0.4000。

PS。调试时,_session 有一个名为 EnabledFilter 的属性,我的过滤器就列在那里。那么,怎么了?

【问题讨论】:

    标签: c# nhibernate


    【解决方案1】:

    根据 NHibernate documentation,您可以在定义后将过滤器附加到您的类:

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

    如果您使用 Fluent NHibernate,您也可以使用此reference

    【讨论】:

    • 我正在使用 Fluent NHibernate。 ApplyFilter("PonyCondition = :condition");在 ClassMap 中解决了这个问题。谢谢。但是 FilterDefinition 中的 .WithCondition("TenantId= :tenantId") 不应该为我这样做?!?!
    • 显然需要为每个类指定它,因此如果您使用 Fluent NHibernate,您可以创建一个基类映射以将过滤器附加到您的所有类,或者按照约定 askpoya.wordpress.com/2014/02/04/…
    猜你喜欢
    • 1970-01-01
    • 2012-08-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多