Я пытаюсь заставить работать вышеупомянутую конфигурацию, но безуспешно.
Шаг 1)
Я запустил новое решение с приложением службы WCF проект.
Шаг 2)
В этом проекте я добавил файл edmx и создал очень простую модель:
Entity Parent с Id и DisplayName
Entity Child с Id и ChildDisplayName
Ассоциация от Parent до Child , 1-m , что приводит к NavigationProperties для обоих объектов.
Я сгенерировал базу данных без проблем. После генерации я вставил один объект Parent с двумя связанными объектами Child вручную в базу данных.
Шаг 3)
Я добавил генерацию кода, используя ADO.NET Self-Tracking Entity Generator .
Я знаю, что это должно быть сделано в разных сборках, но чтобы сделать это простым и понятным, я помещаю все это в один и тот же проект (проект WCF)
Шаг 4)
Я просто изменил интерфейс IService для создания простого get
[OperationContract]
Parent GetRootData(Int32 Id);
В соответствующей реализации я беру объект Page из контекста и возвращаю его:
using (PpjSteContainer _context = new PpjSteContainer() )
{
return _context.ParentSet.Include("Child").Single(x => x.Id == Id);
}
Проблема:
Если я сейчас запустил этот проект (Service1.svc - стартовая страница), VS2010 автоматически генерирует тестовый клиент для вызова службы. Но как только я вызываю сервис, я получаю StackOverflowException! Отладка на стороне сервера выглядит нормально, пока не вернется граф объектов.
Если я уберу Включить ("Дочерний") , то все в порядке, но, конечно, Дочерние объекты теперь отсутствуют.
Я понятия не имею, что мне не хватает. Я прочитал много инструкций и руководств, но все делают это так, как я (по крайней мере, я так думаю) ...
Я попробовал пример School здесь , но это не работает для меня, так как кажется, что генерация базы данных и кодировка в примере не совпадают.
Итак, я был бы очень признателен, если бы кто-нибудь смог мне подсказать, как сделать эту работу.
приписка
- Да, все классы сущностей помечены как «[DataContract (IsReference = true)]»
- В файле edmx для параметра Lazy-Loading установлено значение «false»
Edit:
Я изменил WCF, чтобы он размещался в консольном приложении, а не в IIS. Конечно, тогда мне пришлось написать свой собственный маленький тестовый клиент.
Забавно, теперь все работает.
Я, конечно, понятия не имею, почему, но по крайней мере для моего тестирования это решение ...