Entity Framework 6 или Core - чтение результатов запроса с помощью шаблона "DataReader"

Есть ли способ получить результат запроса LINQ для EF DBContext как "Типизированный читатель данных", таким образом, чтобы при чтении результата IQueryable (например, с.ToList()) я не помещал все привести в память?

Я ожидаю что-то вроде этого (или эквивалент):

var personQueryResult=dbContext.People.Where(…).Select(…).AsDataReader();
foreach(person in personQueryResult){
   //Here I expect that person is typed of the People Dbset<T> type, ex. a Person type and i can do:

person.Name="...";
person.Surname="...";
//etc.
}

1 ответ

Решение

Не существует явного метода, который гарантировал бы, что коллекция будет прокручиваться через DbDataReader.

Зная иерархию наследования базовых классов EF, каждое использование foreach на DbSet<T>,IQueryable<T> или же IEnumerable<T>избегая любого прямого метода, который вызовет отложенное выполнение запроса (например, ToList()) будет препятствовать загрузке всех записей в памяти, так что при каждом "MoveNext()" перечислителя будет использоваться "Read()" базового DbDataReader,

Другие вопросы по тегам