You really should not have DbContext in your Controller. MVC is a presentation pattern. Generally, accessing the data store (which DBContext is) is not a concern of the presentation layer.
Have a read about MVC Orchestrator classes, as explained by Dino Esposito.
Orchestrator classes are a bit like the service layer for your MVC application. An Orchestrator knows (but not necessarily understands) your presentation model (the 'M') in your MVC, as well as the models your repository accepts or returns. The main aim of Dino's Orchestrator classes is really to remove the application logic from your Controller classes, and also make them easily testable and reusable. Your Controllers are only responsible for the web related processes (e.g. ensuring request is authenticated, or getting information from the HTTP context, or redirecting the request or composing the HTTP response).
You can also have Factory classes that instantiate and map between your presentation and repository models. For example, a ProductFactory knows how to create ProductViewModel object given a ProductFromRepo object (assuming all info that is needed to create a ProductViewModel object is available from a ProductFromRepo object), and/or vice versa. The sole purpose of these Factory classes is to decouple your model mappings from your Orchestrator, and your Repository.
UPDATE:
To answer your comment, the design of your repositories depend on you. Often people think it should return the DB models. But your repos could return DTOs or even Domain models. It really depends on how you design your repos and your application architecture.