Запросы Linq to Entities * всегда * попадают в базу данных? - PullRequest
2 голосов
/ 11 октября 2010

Мое понимание Entity Framework - то, что, если он может ответить на запрос из своего кэша, он это сделает.Однако мое простое тестирование показывает, что повторные запросы попадают в базу данных, даже если на них ранее был получен положительный ответ:

var u1 = context.Users.SingleOrDefault(u => u.Id == 1);
var u2 = context.Users.SingleOrDefault(u => u.Id == 1);

Эти запросы выполнены успешно.Для каждого я вижу SELECT TOP (2) в SQL Profiler.

Почему EF обращается к базе данных для этого второго запроса?

Ответы [ 2 ]

3 голосов
/ 11 октября 2010

EF всегда выполняет запрос, но возвращает один и тот же экземпляр объекта.Второй запрос не материализуется в новый объект, а возвращается экземпляр, созданный первым запросом.Вот статья об этом поведении.Есть некоторые дополнительные концепции, которые могут заставить второй запрос, например, обновить существующий экземпляр.

2 голосов
/ 11 октября 2010

Ну, потому что EF не использует кеширование.nHibernate делает. Здесь статья о том, как включить кэширование с EF.

Редактировать : EF не имеет прозрачного готового кеша.Но он имеет явный кеш в единице работы: ObjectContext.GetObjectByKey

...