Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk mengendalikan dua kunci asing dari jadual yang sama dalam Kod Rangka Kerja Entiti terlebih dahulu?

Bagaimana untuk mengendalikan dua kunci asing dari jadual yang sama dalam Kod Rangka Kerja Entiti terlebih dahulu?

Patricia Arquette
Lepaskan: 2025-01-29 07:59:38
asal
171 orang telah melayarinya

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

Kod Rangka Kerja Fizikal lebih disukai: mengendalikan dua kunci luar dari jadual yang sama

Apabila menggunakan Kod Rangka Kerja Fizikal untuk mengutamakan hubungan antara entiti, anda mungkin menghadapi dua kunci luaran yang perlu ditubuhkan dari jadual yang sama. Ini amat mencabar untuk pemula.

Katakan anda ingin membuat model data untuk pasukan dan permainan. Menggunakan kod pilihan, anda boleh menulis kod berikut:

Walau bagaimanapun, kod ini akan menyebabkan keabnormalan:

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

Hubungan rujukan ini akan membawa kepada rujukan kitaran yang tidak diingini. [Nama kekangan = match_guestteam]

Untuk menyelesaikan masalah ini, anda perlu menyediakan kaedah yang berbeza untuk EF untuk memetakan kunci luaran. Penyelesaian yang berkesan adalah untuk membuat koleksi berasingan untuk permainan rumah dan permainan di kelas

:

Team Dalam kelas <中>, anda boleh mengeluarkan atribut

, hanya menentukan atribut kunci luar:
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; }
}
Salin selepas log masuk

Match Akhirnya, dalam kelas <类>, anda perlu menggunakan ForeignKey dan

hubungan konfigurasi:
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

DbContext melalui perubahan ini, anda boleh berjaya menubuhkan dua kunci luaran dari jadual yang sama dalam model keutamaan kod rangka fizikal. HasRequired()

Atas ialah kandungan terperinci Bagaimana untuk mengendalikan dua kunci asing dari jadual yang sama dalam Kod Rangka Kerja Entiti terlebih dahulu?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan