C# 缓存生成的连接太多
考虑以下用于构建授权信息缓存的方法。当您有一个上下文用户时,缓存将能够告诉您您对哪些公司等的权限C# 缓存生成的连接太多,c#,nhibernate,caching,fluent-nhibernate,C#,Nhibernate,Caching,Fluent Nhibernate,考虑以下用于构建授权信息缓存的方法。当您有一个上下文用户时,缓存将能够告诉您您对哪些公司等的权限 internal List<UserGroupInfo> BuildUserGroupCache() { // NB! If you remove the ToArray() a lot of duplicate infos will be generated! return Session.Query<UserGroup>()
internal List<UserGroupInfo> BuildUserGroupCache()
{
// NB! If you remove the ToArray() a lot of duplicate infos will be generated!
return Session.Query<UserGroup>()
.FetchMany(ug => ug.FunctionGroups).ThenFetchMany(fg => fg.Functions)
.FetchMany(ug => ug.Companies).ToArray().Select(ug => new UserGroupInfo(ug)).ToList();
}
为什么这是一个问题?因为当我有很多这样的实体时,结果集将迅速增长,并包含大量不必要的重复数据。冬眠的犀牛有这样的说法
这些的自动映射覆盖如下所示:
//UserGroup
mapping.HasManyToMany(x => x.Companies)
.FetchType.Select()
.ExtraLazyLoad();
mapping.HasManyToMany(x => x.FunctionGroups)
.FetchType.Select();
//FunctionGroup
mapping.HasManyToMany(x => x.Functions)
.FetchType.Select();
我怎样才能改变它,使我不会得到所有这些连接?我想实现的是对每种实体类型的全面选择;UserGroup、FunctionGroup和Function,并让NHibernate根据关系表建立关系;FunctionGroupToUserGroup等
我应该怎么做,或者通过使用HQL或者其他什么来自己做。在这一点上,我对任何建议都持开放态度
//UserGroup
mapping.HasManyToMany(x => x.Companies)
.FetchType.Select()
.ExtraLazyLoad();
mapping.HasManyToMany(x => x.FunctionGroups)
.FetchType.Select();
//FunctionGroup
mapping.HasManyToMany(x => x.Functions)
.FetchType.Select();