【问题标题】:Nhibernate and SetCacheable with second level cacheNhibernate 和 SetCacheable 与二级缓存
【发布时间】:2011-06-19 09:45:39
【问题描述】:

我正在使用 Rhino.Security 存储库来管理我的用户/角色。
创建、删除和关联的过程运行良好,但是当我使用一种方法查询时遇到问题:GetAssociatedUsersGroupFor。
第一次调用该方法时,我没有为我的用户获取任何组,因为我还没有创建任何关联。 此时,我将一个用户与几个组相关联。
我签入数据库,我可以看到关联。
现在我再次调用 GetAssociatedUsersGroupFor 但我无法获得任何组。
使用探查器,我看到这次没有涉及数据库。 我检查了代码,发现该函数使用了 Nhibernate SetCacheable:

    public virtual UsersGroup[] GetAssociatedUsersGroupFor(IUser user)
    {
        ICollection<UsersGroup> usersGroups =
            SecurityCriterions.AllGroups(user)
                .GetExecutableCriteria(session)
                .AddOrder(Order.Asc("Name"))
            .SetCacheable(true)
            .List<UsersGroup>();
        return usersGroups.ToArray();
    }

由于我不想更改 Rhino.Security 代码,我想知道我是否可以以任何方式覆盖或更改此行为。

更新:

我使用这条指令来获取关联的组:

AuthorizationRepository.GetAssociatedUsersGroupFor(User);

我与这段代码相关联:

AuthorizationRepository.AssociateUserWith(User, grpName);

并分离:

AuthorizationRepository.DetachUserFromGroup(User, groupToRemove.Name);

更新

我发现我在配置中留下了二级缓存:

<property name="cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache</property>
<property name="cache.use_second_level_cache">true</property>
<property name="cache.use_query_cache">true</property>

我认为拥有二级缓存是一件好事,可以提高性能,但是,我似乎完全错了。
有没有人可以帮助我了解这里发生了什么?

【问题讨论】:

  • 您能否将代码发布到您保存新关联并随后检索它们的位置?
  • @mannish:我附上了代码。这很简单。正如我所说,我可以在数据库中找到记录,所以一切正常。我已经重新编译了 Rhino.Security 模块并在此处添加了注释:.SetCacheable(true) 并且一切正常,但我想避免这种情况。
  • 我很清楚,这是在单独的 NHib 会话中进行的,对吗?您不是在一个会话中完成所有这些吗?如果记录最终进入数据库,我假设它们是不同的会话/事务。
  • @mannish: 是的,因为我的应用是 ASP.NET MVC。我打开一个会话保存数据。会话随即关闭。如果我尝试更改数据,我会打开另一个会话,获取数据,我注意到查询在保存之前返回了以前的信息。

标签: nhibernate second-level-cache rhino-security


【解决方案1】:

rhino.security 有问题。
我已经设法解决了这个问题,即使我不喜欢它。
当我更改关联时,我已致电 SessionFactory.EvictQueries(),一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多