NHibernate ISessionFactory在OpenSession上启用过滤器

时间:2014-05-11 15:00:15

标签: nhibernate spring.net

我一直在尝试创建一个 ISessionFactory ,它有一个过滤器列表作为属性(因此可以在XML配置中指定)并在调用OpenSession()时启用每个过滤器

不幸的是,我在每一个转折点都受到了阻碍。我已经将 LocalSessionFactoryObject SimpleDelegatingSessionFactory 的子类化,我想到的各种方式进行了混合和匹配,但总是有一些语法或运行时错误这使它无法工作。

有谁能举例说明如何做到这一点?

提前致谢。

[更新

我被要求提供一些代码来说明我的问题。我不认为这与我提出的问题非常相关,但我可以详细说明:

我认为,为了确保在打开新会话时启用过滤器,我必须拥有自己的 OpenSession 方法。这似乎是最好的方法是继承 DelegatingSessionFactory ,添加filter-list属性和这样的方法

public new ISession OpenSession()
{
    var rtn = base.OpenSession();
    foreach (var filter in filters)
        rtn.EnableFilter(filter);
    return rtn;
}

当我将 Spring 构造为我的 ISessionFactory 对象时,我遇到了关于没有异常翻译器的运行时错误。所以,我认为我最好还要继承 LocalSessionFactoryObject 并让它使用过滤器列表创建我的新类型的 ISessionFactory ,而不是默认类型。为此,我试图覆盖 NewSessionFactory ,但后来我遇到了一个关于没有定义 DbProvider 的运行时错误,当我尝试复制处理此问题的代码时strong> LocalSessionFactoryObject 由于某些成员的范围,我收到了一堆语法错误......

简而言之,看起来应该很简单的东西 - 实际上我相信许多人在我之前做过 - 转而进行编码游览。这就是为什么我要寻找已经完成它的人,或者至少比我更了解框架的原因。

1 个答案:

答案 0 :(得分:0)

但过滤器是否需要始终处于活动状态?如果是这种情况,那么您应该使用对实体和/或集合的Where限制。