Please draw a distinction between your domain models and your view models. Your view models are not responsible for persisting data. Your view models exist simply as containers for entities that are passed to and from your views. Quite simply, they are a model of the view - not the persisted data that the view is designed to manipulate.
With this in mind, then, you should use your controller to interact with whatever entity you are using to manipulate your persisted data (be it a repository or - more directly - a database context). The view model is used as a medium through which to communicate this data from your view to your controller, which, in turn maps your fields to whichever business entities it pertains and interacts with your chosen method of persistence. The view model and your business entity models should be ignorant of each other.
The only logic your view model should contain (and this should, ideally, be kept to a minimum) is logic that is clearly only specific to that view model itself.
I posted another answer to a similar question, which demonstrates a skeleton of how this works in practice: