Использование классов, как это ...Cached Fetch для ролей пользователей из NHibernate в качестве MVC App
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, но на данный момент он не использует зависимости базы данных). Но я хотел бы попытаться найти способ очистить его.
Есть ли способ исправить это, чтобы я не получал кеш-хит для каждой отдельной роли при каждом запросе, когда первый запрос был всего лишь одним ударом базы данных? Или, как аналог, я неправильно истолковываю конденсацию на трубе как утечку?
Кэш-клип обычно хорош ... –
Абсолютно, я думаю, мне интересно, если бы я был обеспокоен тем, что он показывает записи о попадании в кеш для каждой роли отдельно в профилировщике, а не показывает одну запись о попадании в кеш для кешированный запрос в целом? Это, и я немного устаю от необходимости прокручивать более 150 кеш-запросов в профилировщике каждый раз, когда я хочу посмотреть, что остальная часть записей. –
Нет, не стоит волноваться. Кэш объектов отдельно от кеша запросов, который кэширует только идентификаторы. –