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:
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; } }
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
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; } }
Match
Akhirnya, dalam kelas <类>, anda perlu menggunakan ForeignKey
dan
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; } }
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!