Heim >Backend-Entwicklung >C++ >Wie gehe ich zuerst mit zwei Fremdschlüssel aus derselben Tabelle im Entitäts -Framework -Code um?

Wie gehe ich zuerst mit zwei Fremdschlüssel aus derselben Tabelle im Entitäts -Framework -Code um?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-29 07:59:38155Durchsuche

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

Der physische Framework -Code wird bevorzugt: Behandeln Sie zwei äußere Schlüssel aus derselben Tabelle

Wenn Sie den physischen Framework -Code verwenden, um die Beziehung zwischen der Entität zu priorisieren, können Sie zwei externe Schlüssel treffen, die aus derselben Tabelle festgelegt werden müssen. Dies ist für Anfänger besonders schwierig.

Angenommen, Sie möchten ein Datenmodell für das Team und das Spiel erstellen. Mit dem bevorzugten Code können Sie den folgenden Code schreiben:

Dieser Code verursacht jedoch Abnormalitäten:
<code class="language-csharp">public class Team
{
    [Key]
    public int TeamId { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Match> Matches { get; set; }
}

public class Match
{
    [Key]
    public int MatchId { get; set; }

    [ForeignKey("HomeTeam"), Column(Order = 0)]
    public int HomeTeamId { get; set; }
    [ForeignKey("GuestTeam"), Column(Order = 1)]
    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>

Diese Referenzbeziehung führt zu unerwünschten Zyklusreferenzen. [Einschränkungen name = match_guestTeam]

Um dieses Problem zu lösen, müssen Sie unterschiedliche Methoden für EF bereitstellen, um die externen Schlüssel zuzuordnen. Eine effektive Lösung besteht darin, eine separate Kollektion für die Heimspiele und Auswärtsspiele in der
-Klasse zu erstellen:

Team

In der Klasse können Sie das Attribut
<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>
entfernen. Definieren Sie einfach das Attribut des äußeren Schlüssels:

Match ForeignKey Schließlich müssen Sie in der -Klasse

und
<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; }
}</code>
Konfigurationsbeziehung verwenden:

DbContext HasRequired() Durch diese Änderungen können Sie zwei externe Schlüssel aus derselben Tabelle im Prioritätsmodell des physischen Framework -Codes erfolgreich herstellen. WithMany()

Das obige ist der detaillierte Inhalt vonWie gehe ich zuerst mit zwei Fremdschlüssel aus derselben Tabelle im Entitäts -Framework -Code um?. 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