Сериализация прокси-классов Entity Framework с Newtonsoft.Json завершается с ошибкой, что объект удаляется - PullRequest
0 голосов
/ 10 октября 2018

У меня проблема с сериализацией прокси-классов с лениво загруженными навигационными свойствами.Ошибка, которую я улавливаю, выглядит следующим образом:

ObjectDisposedException: экземпляр ObjectContext был удален и больше не может использоваться для операций, требующих подключения.

Сериализацияпроисходит сбой, когда Newtonsoft.Json пытается это сделать:

JsonConvert.SerializeObject(objectGraph, _settings)

Например, objectGraph выглядит примерно так:

class Locations {
    public virtual ICollection<Department> Departments;
}

И свойство Department не может быть загружено, поскольку контекст ужеdisposed.

Вопрос:

Как предотвратить загрузку отложенных загруженных свойств сериализатором JSON?

Я пытался использовать # 1 распознаватель контрактов , # 2 конвертер типов , но они не помогли.Похоже, что объект загружен полностью, прежде чем применять эти преобразователи или преобразователи.Я предполагаю, что должен быть какой-то способ предотвратить загрузку ленивых свойств.

Есть идеи?

Для тех, кто интересуется кодом класса макета: git repo .

1 Ответ

0 голосов
/ 10 октября 2018

Вы пытались использовать [yourQuery].AsNoTracking().FirstOrDefault() при запросе данных из базы данных.

Затем вы получите "реальный" объект вместо прокси-объекта (https://stackoverflow.com/a/13077670/8336973).

Когда нетотслеживание активно, отложенная загрузка не произойдет, и все, что не загружено, будет NULL и не вызовет ObjectDisposedException.

...