Кэшированная выборка для ролей пользователей из NHibernate в приложении MVC

Используя классы как это...

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, который выглядит так...Модель данных 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, но в настоящее время он не использует зависимости от базы данных). Но я хотел бы попытаться найти способ очистить его.

Есть ли способ исправить это, чтобы я не получал попадание в кэш для каждой роли в каждом запросе, когда первый запрос был только одним попаданием в базу данных? Или, как аналогия, я неправильно истолковываю конденсацию на трубе как утечку?

1 ответ

Решение

Кеш сущностей отделен от кеша запросов.

В кеше запросов хранятся только идентификаторы, полученные в результате выполнения запроса, поэтому для извлечения сущностей требуется получить этот список, а затем получить все значения из кеша сущностей.