Heim >Backend-Entwicklung >C++ >Wie kann ich zuerst zwei Fremdschlüsse aus derselben Tabelle im Entitäts -Framework -Code richtig abbilden?

Wie kann ich zuerst zwei Fremdschlüsse aus derselben Tabelle im Entitäts -Framework -Code richtig abbilden?

Linda Hamilton
Linda HamiltonOriginal
2025-01-29 08:20:13680Durchsuche

How to Properly Map Two Foreign Keys from the Same Table in Entity Framework Code First?

Entity Framework Code zuerst: Umgang mit mehreren Fremdschlüssel aus einer einzelnen Tabelle

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

Die Lösung:

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

überarbeitetes Modell:

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

Modellkonfiguration (DBContext):

Die Beziehungen müssen in der

-Methode Ihrer

Klasse explizit definiert werden: OnModelCreating DbContext

Diese Konfiguration birgt die Fremdschlüssel explizit und setzt vor, um die versehentliche Löschung von Teams zu verhindern, wenn Übereinstimmungen gelöscht werden.
<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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn