Ошибка при запросе Entity Framework, OutOfMemoryException или ошибка при использовании context.AsNoTracking()

Я пытаюсь вернуть в приложение список приложений через Json (используя Ajax). Я уже пробовал двумя способами:

Использование выбора

var query = (from ad in db.AddressNamePlaces.AsNoTracking()
                     where ad.cepPlace == zipCode.Replace("-", string.Empty)
                     select ad ).ToList();

.Где (выражение) метод:

var query = db.AddressNamePlaces.AsNoTracking().Where(l => l.cepPlace == zipCode.Replace("-", string.Empty)).ToList();

Оба они работают нормально.

Соображения: связанные таблицы в AddressNamePlace содержат более 770 тыс. записей, и если я использую без метода .AsNoTracking(), приложение возвращает в Json исключение OutOfMemoryException. Entity Framework создает множество объектов для каждой записи, а метод .AsNoTracking() избегает этого.

Если я использую вышеуказанные запросы, я получаю следующую ошибку: «Когда объект возвращается с параметром слияния NoTracking, Load может вызываться только тогда, когда EntityCollection или EntityReference не содержат объектов».

Итак, что здесь не так?


person Matheus Gelinski    schedule 14.04.2015    source источник


Ответы (1)


Я нахожу решение для этого случая. Перед выполнением моего запроса мне нужно было установить значение false для атрибута «ProxyCreationEnabled», код:

db.Configuration.ProxyCreationEnabled = false;
        var query = db.AddressNamePlaces.AsNoTracking().Where(l => l.cepPlace == zipCode.Replace("-", string.Empty)).ToList();
person Matheus Gelinski    schedule 14.04.2015