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
Patricia Arquetteasal
2025-01-29 07:59:38172semak imbas

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:

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

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

Match Akhirnya, dalam kelas , anda perlu menggunakan ForeignKey dan

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

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