我正在使用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>
我曾认为拥有一个二级缓存可以提高性能,但看来我完全错了。
是否有人可以帮我理解这里发生了什么?