Heim >Backend-Entwicklung >C++ >Wie kann ich zuerst zwei Fremdschlüsse aus derselben Tabelle im Entitäts -Framework -Code richtig abbilden?
Dieser Artikel befasst sich mit der Herausforderung, zwei Fremdschlüssel aus derselben Tabelle (z. B. Team
) auf eine andere Tabelle (Match
) in Entity Framework Code zuzuordnen. Ein gemeinsamer Fehler ist eine zyklische Referenzausnahme.
Das Problem:
Bei der Modellierung einer Match
-Entität mit einem HomeTeam
und A GuestTeam
entsteht häufig ein zyklischer Beziehungsfehler. Dies liegt daran
Team
Der Schlüssel besteht darin, die Beziehung explizit als zwei separate Eins-zu-Viele-Beziehungen von
bis zu definieren. Dies wird erreicht, indem zwei Navigationseigenschaften innerhalb der Team
Klasse erstellt werden. Match
Team
Beachten Sie, dass
<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; } } 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; } }</code>nun
und Team
Sammlungen hat und die Rollen jedes Teams in einem Spiel deutlich unterscheidet. HomeMatches
AwayMatches
Die Beziehungen müssen in der
-Methode Ihrer Klasse explizit definiert werden: OnModelCreating
DbContext
<code class="language-csharp">protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Match>() .HasRequired(m => m.HomeTeam) .WithMany(t => t.HomeMatches) .HasForeignKey(m => m.HomeTeamId) .WillCascadeOnDelete(false); // Prevent orphan records modelBuilder.Entity<Match>() .HasRequired(m => m.GuestTeam) .WithMany(t => t.AwayMatches) .HasForeignKey(m => m.GuestTeamId) .WillCascadeOnDelete(false); // Prevent orphan records }</code>
Dieser Ansatz definiert deutlich die Beziehungen, vermeidet den zyklischen Referenzfehler und liefert ein robustes und wartbares Datenmodell. WillCascadeOnDelete(false)
Das obige ist der detaillierte Inhalt vonWie kann ich zuerst zwei Fremdschlüsse aus derselben Tabelle im Entitäts -Framework -Code richtig abbilden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!