#c_sharp #entity_framework #linq
Я так поняла, что если у меня данные IQueryable, то запрос выполняется, только когда я вызываю методы Count(), ToList() и подобные, либо начинаю перебирать в цикле. //не загружает данные IQueryableemployeesModels = _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); В первый раз так и отрабатывает. Во второй после первого же простого запроса лист заполняется. Может бд хэш какой сохраняет? Она у меня все время подключена, как синглтон сделана. Мне совершенно не подходит такой способ, надо запрос накопить и потом выполнить, у меня получается данные на клиенте сортируются. Как сделать, чтобы данные заполнялись только когда я к ним обращаюсь?
Ответы
Ответ 1
То, что вы видите в ResultsView в дебаге - это результат работы отладчика, который сам выполняет перечисление результатов. Фактически, запрос к базе выполняется каждый раз когда вы заглядываете в ResultsView - и к работе программы без отладчика это не имеет ни малейшего отношения. Чтобы определить какие запросы к БД реально выполняются - нужно использовать профайлер. Например, можно использовать встроенный в студию IntelliTrace. Альтернативный вариант - использовать утилиты идущие в составе с СУБД, например SQL Server Profiler Также можно использовать встроенные возможности Entity Framewwork в виде свойства DbContext.Database.Log - этот делегат будет вызываться каждый раз когда выполняется запрос к БД.
Комментариев нет:
Отправить комментарий