He estado buscando recursos sobre cómo declarar relaciones de claves foráneas y otras restricciones usando 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, que es genial (felicitaciones a Microsoft!) Pero ahora quiero que NO funcione porque necesito tener restricciones en el modelo de datos.¿Cómo debo declarar relaciones de claves foráneas usando Code First Entity Framework (4.1) en MVC3?
Por ejemplo, tengo un objeto Order que tiene un montón de propiedades que son objetos externos (tablas). En este momento puedo crear un pedido sin problemas, pero sin poder agregar la clave externa u objetos externos. MVC3 establece esto sin problema.
Me di cuenta de que solo podí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 las relaciones de restricción no se han cumplido.
NUEVA INFORMACIÓN
Así, en concreto, me gustaría un excepción a ocurrir cuando intento guardar un objeto Orden sin especificar un objeto de cliente. Este no parece ser el comportamiento si I solo compone los objetos como se describe en la mayoría de la documentación de Code First EF.
reciente 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 consigo ahora, cuando el acceso a VS Vista generada por el paciente:
MENSAJE DE ERROR
El ForeignKeyAttribute en la propiedad ' El paciente 'en el tipo ' PhysicianPortal.Models.Order 'no es válido. No se encontró el nombre de clave externa 'Parent' en el tipo dependiente 'PhysicianPortal.Models.Order'. El valor del nombre debe ser una lista separada por comas de nombres de propiedades de claves foráneas.
Saludos,
Guido
Gracias Sergi - He añadido algo de información adicional en el presupuesto del bloque. –
@Guido: he actualizado mi respuesta en función de la última edición del código, espero que esto ayude. –
¡Bien hecho Sergi! – Shimmy