IQueryable в Entity Framework

211
19 ноября 2017, 13:16

Я так поняла, что если у меня данные IQueryable, то запрос выполняется, только когда я вызываю методы Count(), ToList() и подобные, либо начинаю перебирать в цикле.

//не загружает данные
IQueryable<Employees> employeesModels = _dbDopuskContext.Employees.AsNoTracking().Where(e => e.Deleted.Equals(0));
//не загружает данные    
foreach (string s in searchValues)
{
employeesModels = employeesModels.Where(e => e.Surname.Contains(s) || e.Name.Contains(s) || e.Patronymic.Contains(s) || e.Tabnum.Contains(s));
}                    
//загружает, т.к. используется Take
employeesModels = employeesModels.Skip((currentPage - 1) * Defined.EmployeesPageLength)
.Take(Defined.EmployeesPageLength);

В первый раз так и отрабатывает. Во второй после первого же простого запроса лист заполняется. Может бд хэш какой сохраняет? Она у меня все время подключена, как синглтон сделана.

Мне совершенно не подходит такой способ, надо запрос накопить и потом выполнить, у меня получается данные на клиенте сортируются.

Как сделать, чтобы данные заполнялись только когда я к ним обращаюсь?

Answer 1

То, что вы видите в ResultsView в дебаге - это результат работы отладчика, который сам выполняет перечисление результатов. Фактически, запрос к базе выполняется каждый раз когда вы заглядываете в ResultsView - и к работе программы без отладчика это не имеет ни малейшего отношения.

Чтобы определить какие запросы к БД реально выполняются - нужно использовать профайлер.

Например, можно использовать встроенный в студию IntelliTrace.

Альтернативный вариант - использовать утилиты идущие в составе с СУБД, например SQL Server Profiler

Также можно использовать встроенные возможности Entity Framewwork в виде свойства DbContext.Database.Log - этот делегат будет вызываться каждый раз когда выполняется запрос к БД.

READ ALSO
Синхронизация детей Unity

Синхронизация детей Unity

Использую компонент Network Transform, позиция синхронизируется нормальноПробую использовать Netwrok Transform Child, позиция детей не синхронизируется вообще

226