Скорее всего, эта проблема возникает из-за функции "отложенной загрузки" Entity Framework.Обычно, если явно не требуется во время начальной выборки, все объединенные данные (все, что хранится в других таблицах базы данных) выбираются только при необходимости.Во многих случаях это хорошо, так как предотвращает выборку ненужных данных и, таким образом, повышает производительность запросов (без объединений) и сохраняет пропускную способность.
В ситуации, описанной в вопросе, начальная выборка выполняется и во время«выберите» фазу отсутствия данных отложенной загрузки запрашивается, выдаются дополнительные запросы, а затем EF жалуется на «открытый DataReader».
Обходной путь, предложенный в принятом ответе, позволит выполнить эти запросы и фактически весь запросбудет успешным.
Однако, если вы изучите запросы, отправленные в базу данных, вы заметите несколько запросов - дополнительный запрос для каждой отсутствующей (загруженной лени) информации.Это может быть причиной снижения производительности.
Лучше всего сказать EF предварительно загрузить все необходимые лениво загруженные данные во время первоначального запроса.Это можно сделать с помощью оператора «Включить»:
using System.Data.Entity;
query = query.Include(a => a.LazyLoadedProperty);
Таким образом, все необходимые объединения будут выполнены, и все необходимые данные будут возвращены в виде одного запроса.Проблема, описанная в вопросе, будет решена.