【问题标题】:NHibernate ISessionFactory that enables filters on OpenSession在 OpenSession 上启用过滤器的 NHibernate ISessionFactory
【发布时间】:2014-05-15 19:41:23
【问题描述】:

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

不幸的是,我每时每刻都受到阻碍。我已将 LocalSessionFactoryObjectSimpleDelegatingSessionFactory 子类化,以我能想到的各种方式进行混合和匹配,但总会有一些语法或运行时错误使其无法正常工作。

谁能给我一个例子来说明如何做到这一点?

提前致谢。

[更新]

有人要求我提供一些代码来说明我的问题。我不认为这与我要问的问题真正相关,但我可以详细说明:

我认为要确保在打开新会话时启用过滤器,我必须拥有自己的 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,当我尝试从 LocalSessionFactoryObject 由于某些成员的范围,我遇到了一堆语法错误...

简而言之,一些看起来应该很简单的事情——事实上,我更希望很多人在我之前已经做过——变成了一次编码之旅。这就是为什么我正在寻找已经完成它的人,或者至少比我更了解框架的人。

【问题讨论】:

  • 我不是 100% 确定您在这里提出的问题。您是说您在 XML 映射上定义了一些过滤器并希望启用它们,而不是在查询级别而是在会话级别?你在说什么filters?你能提供更多细节吗?
  • 是的,我试图在会话打开时调用 session.EnableFilter()——这是由 OpenSessionInView 完成的——而不是让使用会话的每个方法都包含 EnableFilter() 调用。过滤器本身没什么特别的:“ACTIVE = 1”。就是这样。

标签: nhibernate spring.net


【解决方案1】:

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

【讨论】:

  • 不,在极少数情况下我们不想启用过滤器。
  • 我正在寻找非常相似的东西。无论何时创建会话,都应启用过滤器。如果您有解决方案,请分享。
猜你喜欢
  • 1970-01-01
  • 2015-06-26
  • 1970-01-01
  • 2010-10-31
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多