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
Lepaskan: 2025-01-29 08:20:13
asal
735 orang telah melayarinya

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:

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; }
}
Salin selepas log masuk
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

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
}
Salin selepas log masuk
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 Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan