Rumah >pembangunan bahagian belakang >C++ >Bagaimana cara memetakan dua kunci asing dari jadual yang sama dalam kod rangka entiti pertama?

Bagaimana cara memetakan dua kunci asing dari jadual yang sama dalam kod rangka entiti pertama?

Linda Hamilton
Linda Hamiltonasal
2025-01-29 08:20:13683semak imbas

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

Kod Rangka Kerja Entiti Pertama: Mengendalikan Kekunci Asing dari satu Jadual

Artikel ini menangani cabaran pemetaan dua kunci asing dari jadual yang sama (mis.,

) ke jadual lain (Team) dalam Kod Rangka Kerja Entiti Pertama. Kesalahan biasa yang dihadapi adalah pengecualian rujukan kitaran. Match

Masalah:

Apabila memodelkan entiti

dengan Match dan HomeTeam, kedua -duanya merujuk jadual GuestTeam, kesilapan hubungan kitaran sering timbul. Ini kerana kerangka entiti, secara lalai, menganggap hubungan satu-ke-banyak, yang membawa kepada pergantungan bulat. Team

Penyelesaian:

Kuncinya adalah dengan jelas menentukan hubungan sebagai dua hubungan satu-ke-banyak yang berasingan dari

ke Team. Ini dicapai dengan mewujudkan dua sifat navigasi dalam kelas Match. Team

Model yang disemak semula:

<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>
Perhatikan bahawa

kini mempunyai Team dan HomeMatches koleksi, dengan jelas membezakan peranan setiap pasukan dalam perlawanan. AwayMatches

konfigurasi model (dbContext):

Hubungan perlu ditakrifkan secara eksplisit dalam kaedah

kelas OnModelCreating anda: 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>
Konfigurasi ini secara eksplisit memetakan kunci asing dan yang penting, menetapkan

untuk mengelakkan penghapusan pasukan yang tidak disengajakan apabila perlawanan dipadamkan. WillCascadeOnDelete(false)

Pendekatan ini dengan jelas mentakrifkan hubungan, mengelakkan ralat rujukan kitaran dan menyediakan model data yang mantap dan dikekalkan.

Atas ialah kandungan terperinci Bagaimana cara memetakan dua kunci asing dari jadual yang sama dalam kod rangka entiti pertama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn