Mejoras al Modelo

Aqui les dejo algunas mejoras que en mi opinion hacen el modelo más mantenible y modificable:
1 - Las validaciónes del view model y el model/Database estaban out of sync. Resultado de la duplicación de codigo para la misma funcionalidad.
2 - Utilizar el nombre Id para todos los Ids no es realista en mi opinion.
3 - La magia de los migrations es buena, pero en pequeñas dosis y solo para cambios. La definición del modelo debe estar alojada en las clases del modelo y no enterrada en migrations. Este cambio permite tener toda la información JobOpportunities en su type.

Otros comentarios en el codigo.
En tu ejemplo el esquema daria como resultado que dos columnas representando la misma información tendrian dos nombres distintos. Id en la tabla Customer, y CustomerId en la tabla  Order. Esto aunque no aplica a este proyecto en particular, en un modelo con una cantidad moderada de referencias haria que la manipulación de la db sea menos intuitiva.

Mi punto, y el cambio del migration es en la generación del nombre de la columna en SQL. La propiedad en c# todavia se llama Id, igual que en tu ejemplo de order/customer,  pero en SQL para mantener la consistencia en los nombres de PK y FK el nombre más descriptivo es utilizado.