Хорошо, это может звучать немного «неортодоксально», но… используя VS2010 и новый шаблон POCO t4 для Entity Framework (Пошаговое руководство: шаблон POCO для Entity Framework), я могу создавать хорошие POCO. Затем я могу использовать эти POCO (как DTO) в службе WCF, по сути, переходя от EDM к клиенту. Что-то вроде того, что делают эти ребята (POCO с EF 4.0 и WCF 4.0), за исключением того, что все создается автоматически. Я понимаю, что объект и DTO «должны» быть разными, но в этом случае я работаю с клиентом и сервером, и есть некоторые реальные преимущества в том, чтобы DTO был в модели и автоматически генерировался.
Моя проблема заключается в том, что когда я передаю объект, который имеет отношение, созданная клиентом коллекция (ICollection) имеет установленное значение только для чтения, поэтому я не могу манипулировать этим отношением. Например, получая существующий заказ, я не могу добавить продукт в коллекцию продуктов на стороне клиента... коллекция продуктов доступна только для чтения.
Я бы предпочел сделать кучу «редактирования заказа» на стороне клиента, а затем отправить обновленный заказ обратно, а не совершать десятки обходов сервера (например, AddProductToOrder (продукт)). Я бы также предпочел, чтобы между Entity и DTO не было кучи переходов. Так что в целом это выглядит хорошо для меня... за исключением части только для чтения.
Есть ли решение, или это слишком много против зерна SOA?