Definieren von mehreren Fremdschlüsseln für Dieselbe Tabelle in Entity Framework Code First
Ich habe zwei Personen in meinem MVC-Anwendung, und ich bevölkerten die Datenbank mit Entity Framework 6 Code First-Ansatz. Es gibt zwei Stadt-id in der Entität Student; einer von Ihnen für BirthCity, die andere für WorkingCity. Wenn ich definieren, die foreign-keys wie oben eine extra Spalte angelegt namens City_ID in der Student-Tabelle nach der migration. Id dort ein Fehler oder wie definieren Sie diese FKs? Vielen Dank im Voraus.
Student:
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public int BirthCityID { get; set; }
public int LivingCityID { get; set; }
[ForeignKey("BirthCityID")]
public virtual City BirthCity { get; set; }
[ForeignKey("LivingCityID")]
public virtual City LivingCity { get; set; }
}
Stadt:
public class City
{
public int ID { get; set; }
public string CityName { get; set; }
public virtual ICollection<Student> Students { get; set; }
}
Ich vereinfachte meine code für die Klarheit, aber mein code genau die gleichen Logik. Auf der anderen Seite hatte ich auch schon versucht, erstellen Sie die Datenbank von Grund auf neu 2-3 mal, aber jetzt mache ich das gleiche wieder und informieren Sie in ein paar Minuten.
Hier sind die Schritte, die ich folgte nun: 1) Gelöscht Migration Ordner und dessen Inhalt von meinem Projekt. 2) Reinigen Sie und erstellen Sie das Projekt in die Lösung. 3) enable-Migrationen auf Paket-Manager-Konsole, und fügen Sie dann AutomaticMigrationsEnabled = true; und AutomaticMigrationDataLossAllowed = true; teh Configuration file-Konstruktor übergeben. 4) Add-Migration. >>>
Aber nach diesem Schritt habe ich beobachtet, dass es eine Eigenschaft "City_ID = c.Int()," in der Up-Methode. Allerdings habe ich danach gesucht, in der Lösung, und es gibt keine "City_ID" - Eigenschaft. Also, warum dieser undefinierten propety wurde zu dem Projekt Hinzugefügt? Vielen Dank im Voraus.
Möglich, Duplikat der Entity Framework Code First - zwei Foreign-Keys aus der gleichen Tabelle
Hier sind die Schritte, die ich folgte nun: 1) Gelöscht Migration Ordner und dessen Inhalt von meinem Projekt. 2) Reinigen Sie und erstellen Sie das Projekt in die Lösung. 3) enable-Migrationen auf Paket-Manager-Konsole, und fügen Sie dann AutomaticMigrationsEnabled = true; und AutomaticMigrationDataLossAllowed = true; teh Configuration file-Konstruktor übergeben. 4) Add-Migration. >>>
Aber nach diesem Schritt habe ich beobachtet, dass es eine Eigenschaft "City_ID = c.Int()," in der Up-Methode. Allerdings habe ich danach gesucht, in der Lösung, und es gibt keine "City_ID" - Eigenschaft. Also, warum dieser undefinierten propety wurde zu dem Projekt Hinzugefügt? Vielen Dank im Voraus.
Möglich, Duplikat der Entity Framework Code First - zwei Foreign-Keys aus der gleichen Tabelle
InformationsquelleAutor Willys | 2015-02-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zu erreichen, was Sie wollen, müssen Sie einige zusätzliche Konfiguration.Die Code First-Konvention identifizieren können bidirektionale Beziehungen, aber nicht, wenn es
mehrere bidirektionale Beziehungen zwischen zwei Entitäten.Sie können hinzufügen, die Konfiguration (mit Daten Anmerkungen oder die Fluent-API), um diese
Informationen zu den model builder. Mit datenanmerkungen verwenden Sie eine Anmerkung
genannt
InverseProperty
. Mit der Fluent-API, verwenden Sie eine Kombination derHas
/With
Methoden, an den richtigen enden diese Beziehungen.Mit Daten Anmerkungen könnte so sein:
Diese Weise Sie explizit bestätigen, dass Sie möchten, zu beziehen, die
BirthCity
navigation Eigenschaft mitStudents
navigation-Eigenschaft in das andere Ende der Beziehung.Mit Fluent-Api könnte so sein:
Mit dieser letzten Lösung, die Sie brauchen nicht zu verwenden Standardtitel.
Nun, der Vorschlag von @ChristPratt in eine Sammlung von
Student
in IhremCity
Klasse für jede Beziehung ist wirklich nützlich. Wenn Sie das tun, dann werden die Konfigurationen mit Daten Anmerkungen könnte so sein:Oder mit Fluent-Api nach der gleichen Idee:
Was, wenn die Beziehung zwischen Student und die Stadt war 1 -> 0..1 ? Wie können Sie das umsetzen, dass mit der fluent-API
diese Antwort ist genau, wie diese behandelt werden sollen. Dies schafft die richtige navigation zusammen mit der richtigen Satz von ForeignKeys in der DB. Ich finde die InverseProperty und ForeignKey-Attribute der einfachste, den code zu Lesen und wirklich sagen, was es tut.
Ich musste
BirthCityID
undHomeCityID
nullable (int?
), um für die Anmerkung-Methode zu arbeiten. Sonst bekam ich immer die Fehlermeldung SqlException: Einführung in die FOREIGN KEY-Einschränkung '...' auf den Tisch '...' kann die Ursache Zyklen oder mehreren cascade-Pfade.was ist zu tun, von Studenten der Immobilie in der City-Klasse?
InformationsquelleAutor octavioccl
Sheesh. Es war ein langer Tag. Es gibt tatsächlich eine sehr große, grell problem mit Ihrem code eigentlich, dass ich völlig verpasst, wenn ich kommentiert.
Das problem ist, dass Sie eine einzige Sammlung von Studenten, die auf
City
. Was ist eigentlich hier passiert, ist, dass EF nicht entscheiden kann, was foreign key-es sollte eigentlich anzeigen, dass die Sammlung, so schafft es ein weiterer Fremdschlüssel explizit zu verfolgen, die Beziehung. Dann, in der Tat haben Sie keine navigation Eigenschaften für die Sammlungen der Schüler abgeleitet ausBirthCity
undLivingCity
.Dafür haben Sie auf den drop-down zu fließend-Konfiguration, da gibt es keine Möglichkeit, konfigurieren Sie diese richtig nutzen nur Daten, Anmerkungen. Sie müssen auch eine zusätzliche Sammlung von Studenten, so können Sie verfolgen beide Beziehungen:
Dann für
Student
:Und schließlich in Ihrem Kontext:
Vielen Dank für die
StudentMapping
Klasse... ich habe wrestling mit denen diese Definitionen sollten Leben, und ich wirklich wie, dass Sie sind sichtbar von derStudent
Klasse - wo die information relevant ist - nicht in den Kontext.Yep, ich kann mich nicht erinnern, wo ich stolperte über dieses Zitat, aber es ist Meilen besser als kleben es auf den Kontext an, wie jeder einzelne tutorial-überall zeigt Sie. Vor der Entdeckung dieser Ansatz, mein größte problem mit fließend config war, dass es nicht mit der Einheit, so es sei denn, Sie wurden zu vergegenwärtigen, welche Unternehmen konfiguriert wurden über den Kontext, führt es zu viel Verwirrung.
Danke, half mir raus hole!
InformationsquelleAutor Chris Pratt