Ho cercato risorse su come dichiarare relazioni di chiavi esterne e altri vincoli utilizzando il codice prima EF 4.1 senza molta fortuna. Fondamentalmente sto costruendo il modello di dati nel codice e usando MVC3 per interrogare quel modello. Tutto funziona tramite MVC, il che è fantastico (complimenti a Microsoft!) Ma ora voglio che NON funzioni perché ho bisogno di vincoli sul modello di dati.
Ad esempio, ho un oggetto Order che ha un sacco di proprietà che sono oggetti esterni (tabelle). In questo momento posso creare un ordine senza problemi, ma senza essere in grado di aggiungere la chiave esterna o oggetti esterni. MVC3 lo imposta senza problemi.
Mi rendo conto che potrei semplicemente aggiungere gli oggetti io stesso nella classe controller prima del salvataggio, ma vorrei che la chiamata a DbContext.SaveChanges () fallisse se le relazioni di vincolo non sono state soddisfatte.
NUOVA INFORMAZIONE
Quindi, in particolare, vorrei che si verificasse un'eccezione quando tento di salvare un oggetto Order senza specificare un oggetto cliente. Questo non sembra essere il comportamento se compongo gli oggetti come descritto nella maggior parte della documentazione di Code First EF.
Ultimo codice:
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; }
}
Questo è l'errore che ottengo ora quando accedo alla vista generata da VS per il paziente:
MESSAGGIO DI ERRORE
ForeignKeyAttribute sulla proprietà "Patient" sul tipo "PhysicianPortal.Models.Order" non è valido. Il nome della chiave esterna "Parent" non è stato trovato nel tipo dipendente "PhysicianPortal.Models.Order". Il valore Name dovrebbe essere un elenco separato da virgole di nomi di proprietà di chiavi esterne.
Saluti,
Guido