Heim >Backend-Entwicklung >C++ >Wie behandle ich zuerst mehrere Fremdschlüsse in derselben Tabelle im Entitäts -Framework -Code?

Wie behandle ich zuerst mehrere Fremdschlüsse in derselben Tabelle im Entitäts -Framework -Code?

DDD
DDDOriginal
2025-01-29 07:55:09537Durchsuche

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

Entity Framework Code zuerst: Verarbeitung mehrerer äußerer Tasten in derselben Tabelle

Im Entitätsgerüstkern ist es wichtig, die inter -begeisterte Beziehung zu modellieren. Wenn Sie begegnen, kann das Erstellen eines Modells mit mehreren externen Schlüssel in derselben Tabelle Abnormalitäten verursachen.

In Ihrem Beispiel definieren Sie das Team und vergleichbar, um die Beziehung zwischen dem Team und dem Spiel zu erfassen. Ihre anfängliche Methode löst jedoch die Abnormalität der Zyklusreferenz aus.

Um dieses Problem zu lösen, müssen Sie die reibungslose API -Konfiguration von Hasrequired () und Withmany () und der Withmany () -Methode sowie der Withmany () -Methode und der OnModelCreating () verwenden. Dies ist ein aktualisiertes Modell:

in diesem Modell:
<code class="language-c#">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; }
}

public class Context : DbContext
{
    // ...

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Match>()
                    .HasOne(m => m.HomeTeam)
                    .WithMany(t => t.HomeMatches)
                    .HasForeignKey(m => m.HomeTeamId)
                    .OnDelete(DeleteBehavior.Restrict); // or DeleteBehavior.NoAction

        modelBuilder.Entity<Match>()
                    .HasOne(m => m.GuestTeam)
                    .WithMany(t => t.AwayMatches)
                    .HasForeignKey(m => m.GuestTeamId)
                    .OnDelete(DeleteBehavior.Restrict); // or DeleteBehavior.NoAction
    }
}</code>

Teamunternehmen umfassen zwei Wettbewerbe: Hausmatches und Auswärtsmatches.
  • Match -Entitäten haben HomeTeamid und GuestTeamid.
  • In OnModelCreating () verwenden wir die fließende API, um die Beziehung zu konfigurieren. Dies kann die Verbreitung von Zirkulationen verhindern.
  • Wir sind explizit
  • (oder
  • ) eingestellt, um Deletionen von der durch Selbstreferenz verursachten Ebene zu verhindern. OnDelete(DeleteBehavior.Restrict) DeleteBehavior.NoAction
  • Mit dieser Methode können Sie im EF -Kernmodell erfolgreich mehrere externe Schlüssel zur gleichen Tabelle festlegen. Beachten Sie, dass in der neueren EF -Kernversion aufgegeben wurde, es wird empfohlen,
oder

zu verwenden. WillCascadeOnDelete(false) verhindern Löschvorgänge, es sei denn, die relevanten Datensätze sind nicht vorhanden. Wählen Sie, welche von Ihren spezifischen Bedürfnissen abhängt. OnDelete(DeleteBehavior.Restrict)

Das obige ist der detaillierte Inhalt vonWie behandle ich zuerst mehrere Fremdschlüsse in derselben Tabelle im Entitäts -Framework -Code?. 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