Как правило, если вы собираетесь возвращать данные из службы, вам нужно будет вернуть класс, определенный для цели службы, содержащий то, что имеет отношение к этому вызову службы, DTO (объект передачи данных) или DataContract в мире WCF.
Одним из инструментов, который особенно полезен для отображения между сущностями и DTO, является AutoMapper . Независимо от того, используете ли вы AutoMapper или просто «лево-правое» кодирование, это предотвратит проблему отложенной загрузки / отложенного выполнения, поскольку выполнение отображения приведет к выполнению.
Существует ряд причин, по которым возвращение объекта из службы может быть не очень хорошей идеей, вот несколько (по большинству из них существуют разные мнения)
- В зависимости от вашей настойчивости (в вашем случае nhib) у вас может быть поведение (отложенное выполнение) или состояние, связанное с вашими сущностями, которые не будут корректно выполняться в другом приложении или сервере
- Возврат сущности приводит к тому, что сервисный уровень часто приводит к вызовам, которые очень похожи на CRUD, приводят к очень болтливому сервисному уровню и очень не-SOA
- Различные вызовы могут требовать больше или меньше данных, чем просто сущность, DTO дает вам возможность свернуть именно то, что вам нужно, и ничего, что вы не делаете.
- Если вы пытаетесь создать повторно используемый сервисный уровень, вы не должны предполагать, что ваши клиенты имеют доступ к вашей сущности или доменной логике, кроме той, которая находится в вашем сервисе. они могут быть написаны в другом приложении, на другом языке и т. д. Если ваши объекты используются для перемещения данных, вы склонны забыть об этом.