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.
Al Foreign Key se le crea un navigational property. Le puedes poner `NombreEntidadForanea` + `Id` y por convención se mapea automágicamente. Si el nombre no sigue la convención, simplemente es agregar una línea en el mapping de esa tabla dentro de las propiedades del DbContext. Por ejemplo:

`````
public class Order 
{
   public int Id {get; set;}
   public DateTime PurchaseDate {get; set;}
   public int CustomerId {get; set;} // Id del foreign key
   public Customer Customer {get; set;} // Navigational property
}

public class Customer 
{
   public int Id {get; set;}
   public string FirstName {get; set;}
   public string LastName {get; set;}
   public virtual ICollection<Order> Orders {get; set;}  //Relacion uno a muchos
}