Это зависит. Если вы ожидаете, что ваш бизнес-уровень просто выполняет операции CRUD, вы можете следовать первоначальному подходу. Если вы планируете использовать какую-то крупную бизнес-логику, где бизнес-компонент будет работать со многими объектами, лучше использовать второй подход.
Причиной, по которой людям нравится использовать второй подход, является тестирование и постоянное невежество. Если вы используете первый подход, ваш бизнес-компонент тесно связан с платформой Entity. Пересмешивать ObjectContext не очень простая задача, поэтому тестирование сложно. Если вы используете второй подход, ваш бизнес-уровень не зависит от уровня персистентности. Вы можете легко проверить это и даже изменить слой устойчивости, если вам нужно. Но это более продвинутые концепции, которые вы, вероятно, не ищете в данный момент. Ваш код нуждается в некотором дополнительном улучшении, чтобы быть тестируемым.
ЦАП также может быть реализован как репозиторий. Существует множество способов создания универсального репозитория, чтобы у вас был только один класс и вы определяли тип сущности при создании экземпляра репозитория:
var repository = new GenericRepository<User>();
Также имейте в виду, что использование отдельного уровня доступа к данным вносит новую сложность, потому что иногда разумно разделять один контекст между несколькими репозиториями. Это происходит вместе с тем, что называется «Модель работы».
В Интернете имеется множество статей о внедрении шаблонов Repository и Unit of work. У меня дома хранятся некоторые из них в качестве избранных, поэтому, если вам интересно, я могу включить их в свой ответ позже.