Ich habe nach Ressourcen gesucht, wie Fremdschlüsselbeziehungen und andere Einschränkungen mit Code zuerst EF 4.1 ohne viel Glück deklariert werden können. Grundsätzlich baue ich das Datenmodell in Code und verwende MVC3, um dieses Modell abzufragen. Alles funktioniert über MVC, was großartig ist (ein großes Lob an Microsoft!), Aber jetzt möchte ich, dass es NICHT funktioniert, weil ich Datenmodelleinschränkungen haben muss.
Zum Beispiel habe ich ein Order-Objekt, das eine Menge Eigenschaften hat, die externe Objekte (Tabellen) sind. Im Moment kann ich problemlos einen Auftrag erstellen, ohne jedoch den Fremdschlüssel oder externe Objekte hinzufügen zu können. MVC3 richtet dies problemlos ein.
Mir ist klar, dass ich die Objekte vor dem Speichern einfach selbst in die Controller-Klasse einfügen kann, aber ich möchte, dass der Aufruf von DbContext.SaveChanges () fehlschlägt, wenn die Einschränkungsbeziehungen nicht erfüllt wurden.
NEUE INFORMATIONEN
Daher möchte ich insbesondere, dass eine Ausnahme auftritt, wenn ich versuche, ein Bestellobjekt ohne Angabe eines Kundenobjekts zu speichern. Dies scheint nicht das Verhalten zu sein, wenn ich nur die Objekte zusammenstelle, wie in den meisten Code First EF-Dokumentationen beschrieben.
Letzter 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; }
}
Dies ist der Fehler, den ich jetzt beim Zugriff auf die VS-generierte Ansicht für Patient erhalte:
FEHLERMELDUNG
Das ForeignKeyAttribute für die Eigenschaft 'Patient' vom Typ 'PhysicianPortal.Models.Order' ist ungültig. Der Fremdschlüsselname 'Parent' wurde für den abhängigen Typ 'PhysicianPortal.Models.Order' nicht gefunden. Der Name-Wert sollte eine durch Kommas getrennte Liste von Fremdschlüsseleigenschaftsnamen sein.
Grüße,
Guido
quelle
Sie können Fremdschlüssel definieren durch:
Jetzt ist ParentId eine Fremdschlüsseleigenschaft und definiert die erforderliche Beziehung zwischen dem Kind und dem vorhandenen Elternteil. Wenn Sie das Kind speichern, ohne das Elternteil zu verlassen, wird eine Ausnahme ausgelöst.
Wenn Ihr FK-Eigenschaftsname nicht aus dem Namen der Navigationseigenschaft und dem übergeordneten PK-Namen besteht, müssen Sie entweder die Datenanmerkung ForeignKeyAttribute oder eine fließende API verwenden, um die Beziehung zuzuordnen
Datenanmerkung:
Fließende API:
Andere Arten von Einschränkungen können durch Datenanmerkungen und Modellvalidierung erzwungen werden .
Bearbeiten:
Sie erhalten eine Ausnahme, wenn Sie nicht festlegen
ParentId
. Es ist eine erforderliche Eigenschaft (nicht nullbar). Wenn Sie es einfach nicht festlegen, wird höchstwahrscheinlich versucht, einen Standardwert an die Datenbank zu senden. Der Standardwert ist 0. Wenn Sie also keinen Kunden mit der ID = 0 haben, wird eine Ausnahme angezeigt.quelle