В моем приложении я часто выбираю некоторые данные из базы данных, автоматически сериализую их и затем отправляю куда-то.
Структура базы данных довольно сложная, но давайте предположим, что у меня есть три отношения, A, B иC, где B и C имеют внешние ключи, указывающие на A. Таким образом, можно перемещаться между этими отношениями, используя свойства навигации (и мне нравится эта функция, я не хочу ее отключать).
Данныеизвлечение выполняется с помощью Entity Framework, поэтому я просто связываю его с некоторым ObjectContext.Установлен параметр MergeOptions.NoTracking.
Моя сериализация данных проверяет каждое свойство и сохраняет его заданным образом.Я не хочу изменять этот механизм.
Проблема возникает, когда я выбираю объект, скажем, из отношения A. Я возвращаю его из уровня базы данных и передаю его в сериализацию.Он пытается получить доступ к ссылкам на B и C, но пока мы находимся за пределами контекста объекта, это невозможно сделать.
Я знаю, что могу сделать следующее:
AEntry a = db.A.FirstOrDefault(something);
a.BReference.Clear(); //(or .Load())
a.CReference.Clear();
return a;
НоМне не нравится это решение.Я ищу что-то, что позволило бы мне сохранить объект «а» (или, возможно, коллекцию таких объектов) как можно дольше не материализованным, и я не хочу беспокоиться о каждой ссылке (так как может быть многоих).
Очевидно, что в этом случае меня не волнует содержание упомянутых объектов (или объектов, ссылающихся на извлекаемый объект).
Надеюсь, моя проблема вполне понятна.Спасибо за помощь.