Моя группа в настоящее время занимается именно этой проблемой. Мы придумали достойный компромисс, которым все были довольны. Имейте в виду, что, прежде чем все закончится, проекты со временем усложняются, и удобство сопровождения является ключевым. Вы также хотите максимально увеличить повторное использование кода, поэтому замена пользовательского интерфейса (или модульное тестирование) - это минимальное усилие.
Учитывая все это, мы предпочли четко определенный уровень домена вместо того, чтобы продвигать EF вплоть до UI. Это делает модель сердцем приложения и не вынуждает нас соответствовать схеме нашей базы данных. Я знаю, что EF пытается абстрагироваться от своей концептуальной модели, но мы продолжали сталкиваться с небольшими хитростями, которые усложняли использование EF для полного стека. Например, действительно нет подходящего места для применения бизнес-логики с EF. Мы не хотели помещать это в Interceptors, и мы не хотели помещать это в UI. Конечно, для этого может быть разумный обходной путь, но нам не понравилось направление, в которое нас толкали.
Компромисс был в том, чтобы использовать EF, но держать его между хранилищем данных и моделью предметной области. Таким образом, нам по-прежнему не нужно программировать на DataReaders, и мы можем использовать преимущества самостоятельного отслеживания сущностей в домене. Затем мы предоставляем базовые сервисы WCF (не RESTful) из нашего домена нашим интерфейсам.
Для нас дополнительная работа по проверке не имела большого значения. Конечно, наш первоначальный выпуск занимает немного больше времени, но общий цикл обслуживания не занимает много времени, потому что мы не сталкиваемся со сложностями инфраструктуры.