It doesn't make sense to cache the ViewModel
ViewModel + View = HTML. So if your view model hasn't changed then the HTML hasn't changed. You can just return the cached page.
Cache the models, because they will be reused over multiple page requests to produce different results.
The most obvious problems are:
The database could run out of space and cause downstream failures
A failed attempt to insert into the database could cause the attempt to get the resource to fail (a more specific variation of the above)
The response to another GET for the same resource could fail incorrectly due to the database change (for instance, you give ...