EF или любой другой ORM (т.е. NHibernate) не заменяет ваш уровень доступа к данным. Скорее ORM - это уровень абстракции от DAL до источника данных.
Не обманывайте себя, полагая, что EF покончил с DAL. EF - это просто еще одна структура источника данных. Тем не менее, в лучшем случае вы все еще хотите абстрагировать и централизовать весь доступ (чтение / запись) в общем DAL.
Вот прекрасный пример того, о чем я говорю. Предположим, что вам нужно удалить данного пользователя в одном из ваших вариантов использования. Тем не менее, при удалении пользователя вы можете захотеть удалить другие записи, связанные с удаленным пользователем, чтобы избежать потерянных записей (если честно, я бы использовал для этого сохраненный процесс). Теперь этот вариант использования застрял в некотором BO, который очень специфичен для этого варианта использования, и удаление, поскольку пользователь - только одна часть общего варианта использования.
В какой-то момент времени у вас есть разработчик, которого просят включить другой вариант использования, который случается вовлекать, удаляя пользователя! Разработчик может сделать несколько вещей. 1) Он может создать новый сценарий использования, который теперь включает удаление пользователя, но забыл удалить все связанные с ним записи этого пользователя. 2) Он, возможно, заметил предыдущий вариант использования, но не мог использовать его напрямую, не слишком обобщив его для своего варианта использования, поэтому он решил скопировать часть этого варианта использования, которая должным образом удаляет пользователя и связанные с ним записи, в его сценарий использования , Теперь у нас есть дубликаты частей кода, которые делают практически то же самое - удаляют пользователя. Юк! Теперь, поместив этого «удаляющего пользователя» в, скажем, вспомогательный класс DAL.Users, вы избежите этой плохой практики проектирования.
В любом случае, одна из приятных особенностей EF - это уменьшение количества бизнес-объектов, которые я использовал для создания вручную, и представление данных на уровне приложений, отличное от того, что видно на уровне хранилища данных.