使用这样的类...
public class Login
{
public virtual Guid LoginId { get; set; }
public virtual string Name { get; set; }
public virtual string Email { get; set; }
public virtual IList<Group> Groups { get; set; }
}
public class Group
{
public virtual Guid GroupId { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
public virtual IList<Role> Roles { get; set; }
public virtual IList<Login> Logins { get; set; }
}
public class Role : ITerminable
{
public virtual Guid RoleId { get; set; }
public virtual string DisplayName { get; set; }
public virtual string RoleName { get; set; }
public virtual string Description { get; set; }
}
还有一个看起来像这样的ERD......
这是我当前的查询。
var login = loginRepository.Query().Where(x => x.Name == username).FetchMany(x=>x.Groups).ThenFetchMany(x=>x.Roles).SingleOrDefault();
return login.Groups.SelectMany(x => x.Roles).Distinct().ToList();
问题是,虽然对我网站的第一个请求总是很好,并且作为对当前用户角色的单个查询进行,但后续请求会导致 NHibernate Profiler 显示大量缓存查询(每个角色一个)。我不完全确定这是否是一个危险信号(我正在使用 SysCache2,但它目前没有使用数据库依赖项)。但我想尝试找到一种方法来清除它。
有没有办法解决这个问题,这样当第一个请求只是一个数据库命中时,我不会在每个请求上获得每个角色的缓存命中?或者作为一个类比,我是否将管道上的冷凝误解为泄漏?