Нужна ли прослойка между Entity Framework и сайтом?
Пункт 0: используйте EF CodeFirst или POCO templates, тогда у вас будут «чистые классы» in the first place.
Пункт 1: все нижесказанное верно до тех пор, пока у вас контроллер работает напрямую с DAL, а не со слоем бизнес-логики или сервисов.

Есть таблица dbUsers в базе. В EF создаются классы dbUsers. Неким образом создается класс User. Слой данных работает с объектами EF а пользователю (контроллеру) отдает красивые чистые объекты класса User без лишней информации.
Это лишняя прослойка.

Есть таблица dbUsers в базе. В EF создаются классы dbUsers. Слой данных напрямую работает с этими объектам и передает их в контроллер. Т.е. контроллер работает с объектами типа dbUsers…
Это вполне нормально.
Давно не пишу на asp.net mvc но в своё время использовал ViewModel.
К примеру у вас есть класс User у которого кроме прочих переменных есть переменная active которое может быть true/false, тобишь активный юзер или нет, допустим у вас есть форма регистрации юзера, но вы не хотите светить эту переменную. Использовать модель User не безопасно, так как это поле всё равно можно будет заполнить и при мапинге формы на модель это переменная заполнится, есть два решения.
1)public ActionResult registration([Bind(Exclude = «active»)] User model)
Так при мапинге данных формы на модель поле active проигнорируется.
2)public ActionResult registration(UserViewModel model)
UserViewModel будет точно такая же как и User класс, кроме поля active, таким образом поле active из формы вообще никогда не прийдёт.

Повторюсь, я давно не писал на asp.net mvc, так что может кто что дополнит или поправит.