我正在使用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>


我认为拥有II级缓存来改善性能是一件好事,但是看来我完全错了。
有没有人可以帮助我了解这里发生的事情?

最佳答案

rhino.security存在问题。
即使我不喜欢,我也设法解决了这个问题。
当我更改关联时,我称为SessionFactory.EvictQueries(),一切正常。

10-04 21:10