Не могу конвертировать poco объект из EF 4 в JSON - PullRequest
0 голосов
/ 21 августа 2010

Я работаю над приложением mvc 2.0, используя платформу управления данными. При работе с сущностью я использую шаблон репозитория с объектами poco. Для начала, когда я конвертирую объект сущности в json, я получаю ошибку циклической ссылки.

После некоторого поиска я обнаружил, что существуют прокси, созданные для поддержки отложенной загрузки. Если между двумя классами (A и B) существуют навигационные свойства, это приводит к ошибке ссылки на цирратор. Вполне понятно. Поэтому я пытаюсь обойти это.

Я отключил прокси и ленивую загрузку. Это работает, если я только хочу загрузить класс A. Вместо прокси теперь есть нулевые значения, поэтому они могут быть проанализированы.

Но теперь я хочу загрузить класс, например, Orders, и я хочу посмотреть, какой клиент разместил заказ:

Предположим, у меня есть класс Customer, у которого есть свойство навигации для Order (от 1 до более), а Order имеет свойство обратной навигации для Customer. Когда я выключаю прокси, я получаю хороший JSON со всеми заказами, но не с клиентами. Когда я включаю прокси, я получаю циклическую ошибку.

Но как я мог вернуть заказы покупателю, который их купил? Можно ли создать linq, который получает заказы и загружает клиентов (у меня есть хранилище как для клиентов, так и для заказов)? Или есть способ снять прокси-объекты?

Надеюсь, мой пост достаточно ясен, и кто-то может мне помочь.

1 Ответ

0 голосов
/ 21 октября 2010

Проблема:
Справа.Таким образом, у вас есть отношения A -> B, где B является многогранной.в модели EF A получает навигационное свойство B, а B получает навигационное свойство A. Циркулярная ссылка ... great ...

Решение:
В вашей модели щелкните правой кнопкой мыши нанавигационное свойство B и выберите свойства.Изначально геттер и сеттер должны быть публичными.Установите для геттера значение Private.

Теперь что-то вроде этого должно работать.

var results = from a in ctx.A.Include("B")
select a;

var list = results.ToList(); //This is important otherwise youll get a error that the context has been disposed on the next line.
return Json(list, JsonRequestBehavior.AllowGet);

Надеюсь, это поможет.

PS: Прочитав мой ответ после публикации, я 'я больше не уверен, что я действительно отвечаю на твой вопрос, извини.Я все же оставлю это.

...