He estado buscando recursos sobre cómo declarar relaciones de clave externa y otras restricciones usando el código primero EF 4.1 sin mucha suerte. Básicamente, estoy construyendo el modelo de datos en código y usando MVC3 para consultar ese modelo. Todo funciona a través de MVC, lo cual es genial (¡felicitaciones a Microsoft!) Pero ahora no quiero que NO funcione porque necesito tener restricciones de modelo de datos.
Por ejemplo, tengo un objeto Order que tiene un montón de propiedades que son objetos externos (tablas). Ahora mismo puedo crear un Pedido sin problema, pero sin poder agregar la clave externa u objetos externos. MVC3 configura esto sin problema.
Me doy cuenta de que podría agregar los objetos yo mismo en la clase de controlador antes de guardar, pero me gustaría que la llamada a DbContext.SaveChanges () fallara si no se cumplen las relaciones de restricción.
NUEVA INFORMACIÓN
Entonces, específicamente, me gustaría que ocurriera una excepción cuando intento guardar un objeto Pedido sin especificar un objeto de cliente. Este no parece ser el comportamiento si solo compongo los objetos como se describe en la mayoría de la documentación de Code First EF.
Último código:
public class Order
{
public int Id { get; set; }
[ForeignKey( "Parent" )]
public Patient Patient { get; set; }
[ForeignKey("CertificationPeriod")]
public CertificationPeriod CertificationPeriod { get; set; }
[ForeignKey("Agency")]
public Agency Agency { get; set; }
[ForeignKey("Diagnosis")]
public Diagnosis PrimaryDiagnosis { get; set; }
[ForeignKey("OrderApprovalStatus")]
public OrderApprovalStatus ApprovalStatus { get; set; }
[ForeignKey("User")]
public User User { get; set; }
[ForeignKey("User")]
public User Submitter { get; set; }
public DateTime ApprovalDate { get; set; }
public DateTime SubmittedDate { get; set; }
public Boolean IsDeprecated { get; set; }
}
Este es el error que obtengo ahora al acceder a la vista generada por VS para el paciente:
MENSAJE DE ERROR
El ForeignKeyAttribute en la propiedad 'Paciente' en el tipo 'PhysicianPortal.Models.Order' no es válido. El nombre de clave externa 'Padre' no se encontró en el tipo dependiente 'PhysicianPortal.Models.Order'. El valor de Nombre debe ser una lista separada por comas de nombres de propiedad de clave externa.
Saludos,
Guido