我正在使用 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>
我认为拥有二级缓存是一件好事,可以提高性能,但似乎我完全错了。
有没有人可以帮助我了解这里发生了什么?