Еще несколько подробностей в ответ на комментарии:
Есть несколько проблем с классами, сгенерированными EF. Сейчас я смотрю на пример AdventureWorks с SalesOrderHeader и SalesOrderDetail. Сущность SalesOrderDetail имеет свойства «SalesOrderHeader» и «SalesOrderHeaderReference», оба помечены как DataMembers. Это похоже на ошибку, поскольку свойство «SalesOrderHeader» также помечено [XmlIgnore] и [SoapIgnore].
Кроме того, подумайте, хотите ли вы сначала сериализовать ссылку на родительский SalesOrderHeader. Кроме того, что именно должно быть сериализовано? SOAP не поддерживает ссылки с возможностью взаимодействия.
Наконец, базовые классы сущностей также являются договорами данных. И все же они не имеют ничего общего с данными , которые вы возвращаете, - они просто артефакт реализации.
Короче говоря, Microsoft облажалась на этом. Они не продумали это до конца.
О способах генерации классов DTO я предлагаю изучить различные инструменты генерации кода, такие как CodeSmith. Вы можете написать код, чтобы сделать это самостоятельно; Я сделал это в моей предыдущей должности. Хорошая вещь о генерации DTO состоит в том, что вы также можете генерировать методы для перевода в и из DTO.
Что касается накладных расходов, накладные расходы на перемещение некоторых данных в памяти - ничто по сравнению с количеством времени, которое потребуется для отправки данных по сети!