Yes its a correct approach.
Essentially you are instantiating an object from a db where the object could be one of several child classes.
A factory is a common way of achieving this.
But is it a good idea to make the factory dependent on this DbContext
Yes. I would always abstract the database into a repository. However, repositories are supposed to ...
You can use Azure Blob storage to upload your images or any other files. You can choose upload the image in the Blob storage and either:
Get the URI of the stored file, and save the URL of the image in the database.
Store the unique reference (which is the file name that you provide when you upload) in the database, download the image from your server and ...