Razbezhkin
@Razbezhkin
программист, преподаватель

Как кэшировать результаты Entity Framework без Lazy Load и подключенного соединения к БД?

Здравствуйте.
Хочу организовать кэширование извлеченных из репозитория через EF6 сущностей в статическом свойстве.
У меня вот такой код:
SPUserInfo user = _r.SPUserInfo.SingleOrDefault(x => x.UserId == UserId);

После того, как я закэшировал объект user, я могу через Lazy Load обращаться к другим связанным сущностям этого объекта. Значит ли это, что у меня вместе с закэшированным объектом в памяти остался длинный хвост EF6 вместе с открытым соединением к БД? Если это так, то как организовать кэширование, чтобы в кэше были оторванные от EF объекты?

Спасибо за подсказку.
  • Вопрос задан
  • 1078 просмотров
Решения вопроса 1
Razbezhkin
@Razbezhkin Автор вопроса
программист, преподаватель
Спасибо.
Оказывается, в DB контексте есть специальные настройки, которые могут напрочь отрезать сущности от контекста:
вот кусочек кода, который настраивает контекст:

CFDB rocontext = new CFDB();
rocontext.Configuration.ProxyCreationEnabled = false;//запрещает использовать прокси классы - на выходе у нас те самые типы, которые мы определяли в моделях
rocontext.Configuration.LazyLoadingEnabled = false;//здесь запрещается использовать отложенную подгрузку данных, и если мы не указали в Include сущности, которые нам понадобятся, то получим исключение
rocontext.Configuration.ValidateOnSaveEnabled = false;//отключает проверку при сохранении, а сохранение вообще не подразумевается
rocontext.Configuration.AutoDetectChangesEnabled = false;//отключает проверку на наличие изменений при сохранении, а сохранение вообще не подразумевается

вроде бы такой вариант меня устраивает - ничего кроме нужных мне сущностей не остается и их можно безопасно кэшировать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Gilga
Если имеете ввиду связанные таблицы, то
SPUserInfo user = _r.SPUserInfo.SingleOrDefault(x => x.UserId == UserId).Include(x =>x.[СвязаннаяТаблица]);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы