Знаете ли вы, что вашим сущностям не нужно сопоставлять один к одному с базой данных? В частности, вы можете опустить столбцы или даже целые таблицы, которые не имеют отношения к делу.
Модель сущности должна быть концептуальной моделью. Вы можете легко создать набор сущностей для представления одному набору клиентов (возможно, веб-службам) и другому набору, сопоставленному с той же базой данных, предназначенным для другого клиента (возможно, веб-приложения).
С другой стороны, я всегда рекомендую не выставлять объекты Entity Framework через веб-сервис. К сожалению, Microsoft предоставляет свойства, зависящие от реализации, помечая их как [DataMember]. Я только что попробовал это с помощью простого сервиса, возвращающего SalesOrderHeader из AdventureWorks. Мой клиент получил прокси-версии следующих типов EF:
- EntityKeyMember
- StructuralObject
- EntityObject
- EntityKey
- EntityReference
- RelatedEnd
Это не то, о чем ваши клиенты должны знать.
Я предпочитаю выставлять объекты передачи данных и копировать свойства из одного в другой. Очевидно, что это лучше сделать с помощью рефлексии или генерации кода, чем вручную. В прошлом я делал это с помощью генерации кода (шаблоны T4).
Опция, которую я не пробовал: AutoMapper .