Отсоедините объект EF от databasecontext, чтобы избежать циклической ссылки - PullRequest
0 голосов
/ 04 ноября 2011

На основе ответа Wes Grants в этой теме: Сериализация проблем Entity Framework

Я попробовал следующий код:

string sid = HttpContext.Current.Request["Sid"];
SYSTEM system = context.SYSTEM.Where(s => s.SYSTEM_ID.Contains(sid)).First();

context.Detach(system);

HttpContext.Current.Response.Write(serializer.Serialize(system));

Но я все еще получаю исключение из циклической ссылки. Я что-то упустил здесь очевидное? Спасибо

1 Ответ

0 голосов
/ 04 ноября 2011

Если вы используете EntityObjects, а не POCO, вы не сможете этого сделать.Причина в том, что если ваш тип SYSTEM является производным от EntityObject, он наследует некоторые свойства, которые также будут сериализованы.См. здесь и здесь .

Решением является либо

  • для переключения на использование POCO вместо EntityObjects
  • написать собственный конвертер, как объяснено в SO-вопросе, который вы связали
  • , чтобы проецировать ваши запросы на анонимные типы и сериализовать эти , используя JavaScriptSerializer
  • для сопоставления вашихсущности к объектам передачи данных (DTO; в основном это контракты данных) и передают их

EDIT:

Если вы уже используете POCO, причиной может быть то, что EF создает внутренне прокси-классов для ваших POCO для отслеживания изменений и отложенной загрузки для работы.Эти прокси-классы создаются динамически и могут вызвать сбой сериализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...