Допустим, у меня есть класс Playlist с некоторыми ссылочными классами.Коллекция сущностей списка воспроизведения помещается в оболочку контекста данных:
public new IQueryable<Playlist> Playlist
{
get
{
return base.Playlist
.Include("PlaylistStep")
.Include("PlaylistStepAttachment");
}
}
Контекст разделяется между компонентами приложения на основе каждого веб-запроса.Первый вызов для объектов списков воспроизведения выглядит следующим образом:
var playlist =
dataContext
.Playlist
.Where(x => x.OwnerUserId == ownerId)
.OrderBy(x => x.Name)
.Skip((page - 1) * count)
.Take(count)
.ToList();
Это создает соответствующий оператор SQL и загружает некоторые списки воспроизведения в контекст, насколько я понимаю.Затем в том же веб-запросе у меня есть несколько вызовов:
var playlist = dataContext
.Playlist
.Where(x => x.PlaylistId == id)
.FirstOrDefault();
, где идентификаторы плейлистов такие же, как были получены во время первого запроса.Что удивляет меня, так это то, что последующие вызовы также генерируют операторы SQL, хотя эти объекты уже были загружены в контекст.Я полагаю, что сущности, которые уже находятся в контексте, должны быть возвращены, а не извлечены БД снова.
Может кто-нибудь сказать мне, где я ошибаюсь, или это нормальное поведение для EF?