Tenho procurado recursos sobre como declarar relacionamentos de chave estrangeira e outras restrições usando o código EF 4.1 primeiro sem muita sorte. Basicamente, estou construindo o modelo de dados em código e usando MVC3 para consultar esse modelo. Tudo funciona via MVC, o que é ótimo (parabéns para a Microsoft!), Mas agora eu quero que NÃO funcione porque preciso ter restrições de modelo de dados.
Por exemplo, eu tenho um objeto Order que tem uma tonelada de propriedades que são objetos externos (tabelas). No momento posso criar um pedido sem problemas, mas sem ser capaz de adicionar a chave estrangeira ou objetos externos. MVC3 configura isso sem problemas.
Percebo que poderia simplesmente adicionar os objetos sozinho na classe do controlador antes de salvar, mas gostaria que a chamada para DbContext.SaveChanges () falhasse se os relacionamentos de restrição não fossem atendidos.
NOVA INFORMAÇÃO
Portanto, especificamente, gostaria que ocorresse uma exceção quando tento salvar um objeto Order sem especificar um objeto de cliente. Este não parece ser o comportamento se eu apenas compor os objetos conforme descrito na maioria da documentação do Code First EF.
Código mais recente:
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 é o erro que recebo agora ao acessar a visualização gerada pelo VS para o paciente:
MENSAGEM DE ERRO
O ForeignKeyAttribute na propriedade 'Paciente' no tipo 'PhysicianPortal.Models.Order' não é válido. O nome da chave estrangeira 'Parent' não foi encontrado no tipo dependente 'PhysicianPortal.Models.Order'. O valor Name deve ser uma lista separada por vírgulas de nomes de propriedades de chave estrangeira.
Saudações,
Guido