Да, это так.Если вы используете сущности на основе EntityObject
, генератор кода по умолчанию и шаблон T4 должны пометить их атрибутами DataContract
и DataMember
.Если вы используете POCO, вам придется либо изменить шаблон для создания этих атрибутов, либо создать POCO вручную.
Причиной, по которой вам нужно использовать эти атрибуты, является проблема с циклической ссылкой.По умолчанию EF создает свойства навигации по обе стороны отношения.Во время сериализации фреймворк нуждается в некоторой подсказке, чтобы узнать об этой циклической ссылке, иначе она пойдет в бесконечный цикл.Чтобы избежать того, что объект должен быть помечен [DataContract(IsReference=true)]
, и как только вы используете атрибут DataContract
, вы должны использовать DataMember
для маркировки каждого сериализованного свойства.
Также важно отключить отложенную загрузку, потому что в противном случае сериализациявызовет отложенную загрузку для каждого свойства навигации и сделает это рекурсивно для всех отложенных объектов.Таким образом, вместо одного объекта вы можете вернуть из своего сервиса все его отношения, все их отношения и т. Д.