Нет, Entity Framework пытается запрашивать базу данных только тогда, когда вам нужна информация, или вам нужно изменить информацию.
Следующий пример - моя личная интерпретация того, что, как мне кажется, EF делает за сценой. Это, вероятно, несколько неточно, но служит иллюстрацией.
using(var db = new MyDbContext()) // 1
{
var entities = db.MyEntities; // 2
foreach(var entity in entities) // 3
{
// 4
} // 5
} // 6
- Установить соединение с базой данных
- Получите некоторый объект, представляющий запрос, который говорит: «Получить мне все сущности дем».
- Перечислить объект. Ака, пусть провайдер запросов контекста переводит «get me all demiteites» в (предполагая sql) «select * from MyEntity with (nolock);» и запускает запрос, возвращающий ADO.NET SqlDataReader, который будет читать первую строку, отобразить объект в (необязательно) ленивый объект с некоторыми метаданными, чтобы EF знал, с какой строкой он сопоставлен и т. д., и вывел его как переменную «entity».
- Сделайте что-нибудь с сущностью, которую вы волшебным образом получили из базы данных, фактически не выполняя никакой реальной работы (спасибо Entity Framework!)
- Попросить EF переместить SqlDataReader в следующую строку и выдать другую сущность (иначе, вернуться к шагу 3, но только если существует другая строка)
- Закрыть соединение с базой данных.