J'ai cherché des ressources sur la façon de déclarer les relations de clé étrangère et d'autres contraintes en utilisant d'abord le code EF 4.1 sans beaucoup de chance. Fondamentalement, je construis le modèle de données dans le code et j'utilise MVC3 pour interroger ce modèle. Tout fonctionne via MVC, ce qui est génial (bravo à Microsoft!) Mais maintenant je ne veux PAS que cela fonctionne car j'ai besoin de contraintes de modèle de données.
Par exemple, j'ai un objet Order qui a une tonne de propriétés qui sont des objets externes (tables). Pour le moment, je peux créer une commande sans problème, mais sans pouvoir ajouter la clé étrangère ou des objets externes. MVC3 met cela en place sans problème.
Je me rends compte que je pourrais simplement ajouter les objets moi-même dans la classe de contrôleur avant d'enregistrer, mais je voudrais que l'appel à DbContext.SaveChanges () échoue si les relations de contrainte n'ont pas été respectées.
NOUVELLE INFORMATION
Donc, plus précisément, j'aimerais qu'une exception se produise lorsque je tente de sauvegarder un objet Order sans spécifier d'objet client. Cela ne semble pas être le comportement si je compose simplement les objets comme décrit dans la plupart de la documentation Code First EF.
Dernier code:
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; }
}
C'est l'erreur que j'obtiens maintenant lors de l'accès à la vue générée par VS pour le patient:
MESSAGE D'ERREUR
Le ForeignKeyAttribute sur la propriété 'Patient' sur le type 'PhysicianPortal.Models.Order' n'est pas valide. Le nom de clé étrangère «Parent» est introuvable sur le type dépendant «PhysicianPortal.Models.Order». La valeur Name doit être une liste de noms de propriété de clé étrangère séparés par des virgules.
Cordialement,
Guido