Если вы используете свои собственные классы вместо классов, сгенерированных непосредственно EF, вы также измените предоставление для Служб данных WCF. Это означает, что вы больше не будете передавать контекст EF в качестве универсального параметра в DataService
базовый класс. Это будет нормально, если у вас есть службы только для чтения, но если вы ожидаете каких-либо изменений данных от клиентов, у вас будет много работы.
Службы данных на основе контекста EF поддерживают модификации данных. Все остальные службы данных используют поставщика отражения , который по умолчанию доступен только для чтения, пока вы не реализуете IUpdatable в своем пользовательском «классе контекста службы».
Службы данных - это технология быстрого создания служб, предоставляющих ваши данные. Они связаны с их контекстом, и ответственность за обеспечение абстракции лежит на контексте. Если вы хотите быстро и легко предоставлять услуги, вы зависите от функций, поддерживаемых EF mapping. Вы можете сделать некоторые абстракции в EDMX, вы можете делать проекции (DefiningQuery, QueryView) и т. Д., Но все эти функции имеют некоторые ограничения (например, проекции доступны только для чтения, если вы не используете хранимые процедуры для изменений).
Услуги передачи данных не совпадают с предоставлением подключения к базе данных. Есть одно очень большое различие - подключение к базе данных обеспечит только доступ и разрешения на выполнение, но не обеспечит безопасность данных. Службы данных WCF обеспечивают безопасность данных, поскольку вы можете создавать перехватчики, которые будут добавлять фильтры к запросам, чтобы получать только те данные, которые пользователь может просматривать, или проверять, разрешено ли ему изменять данные. Об этом вы можете сказать своему коллеге.
В случае абстракции - хотите ли вы быстрое простое решение или нет? Вы можете внедрить слой абстракции между сервисом и ORM, но вам нужно реализовать упомянутый метод, и вы должны протестировать его.