Почему Entity Framework 6.x не кэширует результаты?

c# caching entity-framework entity-framework-6

Вопрос

Возможно, я неправильно понимаю кеширование, которое DbContext и DbSet , но у меня создалось впечатление, что происходит некоторое кэширование. Я вижу поведение, которого я не ожидал бы при запуске следующего кода:

var ctx = CreateAContext();
var sampleEntityId = ctx.SampleEntities.Select(i => i.Id)
                                       .Single(i => i == 3); //Calls DB as expected
var cachedEntityId = ctx.SampleEntities.Select(i => i.Id)
                                       .Single(i => i == 3); //Calls DB unexpectedly

Что тут происходит? Я думал, что часть того, что вы получаете от DbSet заключается в том, что сначала будет проверять локальный кеш, чтобы убедиться, что этот объект существует до запроса базы данных. Есть ли какой-то вариант конфигурации, который я здесь отсутствует?

Принятый ответ

Что @ emcas88 пытается сказать , что EF будет проверять только кэш при использовании .Find метода на DbSet .

Использование .Single , .First , .Where и т.д. не кэширует результаты , если вы не используете кэширование второго уровня.


Популярные ответы

Это связано с тем, что при внедрении методов экстензора используется метод Find контекста

contextName.YourTableName.Find()

для проверки первого кеша. Надеюсь, поможет.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему