Используйте nHibernate или другой ORM, который может отображаться в POCO :-). Затем вы можете решить передать DTO или POCO в зависимости от того, сколько разрыва вы хотите между вашим производителем и потребителем.
Вопрос, который я хотел бы задать, заключается в том, что вы собираетесь использовать данные в Entities / IQueryables и затем преобразовать их в DTO? Это очень правильный шаблон, особенно если вы собираетесь перейти границу службы и не хотите раскрывать модель своего домена; Однако есть компромисс. Минимальное снижение производительности в зависимости от размера данных, но это то, что вам нужно измерить.
Недавно мне пришлось отобразить список объектов организации в выпадающем списке. Организация имеет множество свойств и других дочерних объектов. Ничего из того, что мне было нужно для выпадающего списка, все, что мне было нужно, - это имя, имя и пара дополнительных свойств ...
Вот мой HQL-запрос для поиска в БД и возврата списка DTO с использованием nHibernate:
return CurrentSession.CreateQuery(
"select new OrganizationListDTO(o.Id,o.Name,o.xxx,o.xxx)" +
" from Organization i where i.State=:state")
.SetParameter("state", state)
.List<IOrganizationListDTO>();
Суть в том, что даже если вы используете ORM, вы все равно можете использовать DTO для отчетов, подобных запросам, и позволить ему выполнять всю тяжелую работу.