Verwenden des physischen Framework -Codes bevorzugt: Erstellen Sie zwei externe Schlüssel aus derselben Tabelle, um die Beziehung zwischen Team zu finden
Wenn ein Anfänger die Komplexität des physischen Framework -Code studiert, suchte er Anleitung, um ein effektives Modell zu definieren, um die Beziehung zwischen Team und Spiel widerzuspiegeln. Die spezifischen Anforderungen bestehen darin, dass jedes Spiel zwei verschiedene Teameinheiten umfasst, die als Heimteams und Gastteams spezifiziert werden und die Ergebnisse des Spiels behalten.
Antwort:
Sie können die folgenden Methoden verwenden, um das erforderliche Modell zu erstellen:
Die Teamklassenattribute rebend:
Entfernen Sie die Icollection -Eigenschaft der vorhandenen Übereinstimmungen aus der Teamklasse.
Einführen zwei neue Icollection -Eigenschaften: Hausmatches und Auswärtsmatches.<code class="language-csharp">public class Team { public int TeamId { get; set; } public string Name { get; set; } public virtual ICollection<Match> HomeMatches { get; set; } public virtual ICollection<Match> AwayMatches { get; set; } }</code>
Ändern Sie die Übereinstimmungsklasse, um die erforderlichen Schlüsselattribute zu enthalten, und entfernen Sie das Attribut aus den Eigenschaften der Heimeteam und GuestTeam.
Verwenden Sie fließende API in dbcontex, um die externe Schlüsselbeziehung zu definieren:[ForeignKey]
<code class="language-csharp">public class Match { public int MatchId { get; set; } public int HomeTeamId { get; set; } public int GuestTeamId { get; set; } public float HomePoints { get; set; } public float GuestPoints { get; set; } public DateTime Date { get; set; } public virtual Team HomeTeam { get; set; } public virtual Team GuestTeam { get; set; } } public class Context : DbContext { // ... protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Match>() .HasRequired(m => m.HomeTeam) .WithMany(t => t.HomeMatches) .HasForeignKey(m => m.HomeTeamId) .WillCascadeOnDelete(false); modelBuilder.Entity<Match>() .HasRequired(m => m.GuestTeam) .WithMany(t => t.AwayMatches) .HasForeignKey(m => m.GuestTeamId) .WillCascadeOnDelete(false); } }</code>
Verwenden Sie die fließende API, um die externe Schlüsselbeziehung zu definieren, da in dieser Szene der Standard der Mapping -Hauptschlüssel nicht ausreicht.
Deaktivieren Sie das Löschen der Klasse, um ein versehentliches Löschen der Teams zu verhindern, auf die mehrere Übereinstimmungen verwiesen werden.Das obige ist der detaillierte Inhalt vonWie modelliere ich zuerst eine Team-Match-Beziehung mit zwei ausländischen Schlüssel aus derselben Tabelle im Entitäts-Framework-Code?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!