menggunakan kod rangka kerja fizikal yang disukai: Buat dua kekunci luaran dari jadual yang sama untuk menunjukkan hubungan yang sepadan dengan pasukan
Apabila seorang pemula mencatatkan kerumitan kod kerangka fizikal, dia mencari bimbingan untuk menentukan model yang berkesan untuk mencerminkan hubungan antara pasukan dan permainan. Keperluan khusus ialah setiap permainan melibatkan dua entiti pasukan yang berbeza, yang ditentukan sebagai pasukan rumah dan pasukan tetamu, dan mengekalkan hasil permainan.
Jawapan:
anda boleh menggunakan kaedah berikut untuk membina model yang diperlukan:
mengulangi atribut kelas pasukan:
Keluarkan harta iCollection perlawanan yang sedia ada dari kelas pasukan.
Memperkenalkan dua sifat iCollection baru: Homematches dan Awaymatches.<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>
Ubah suai kelas padanan untuk mengandungi atribut utama yang diperlukan, dan keluarkan atribut dari sifat hometeam dan tetamu.
Gunakan API Fluent dalam DBContex untuk menentukan hubungan utama luaran:[ForeignKey]
<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; } } public class Context : DbContext { // ... protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Match>() .HasRequired(m => m.HomeTeam) .WithMany(t => t.HomeMatches) .HasForeignKey(m => m.HomeTeamId) .WillCascadeOnDelete(false); modelBuilder.Entity<Match>() .HasRequired(m => m.GuestTeam) .WithMany(t => t.AwayMatches) .HasForeignKey(m => m.GuestTeamId) .WillCascadeOnDelete(false); } }</code>
Gunakan API yang fasih untuk menentukan hubungan utama luaran, kerana dalam kejadian ini, lalai yang dipersetujui oleh kunci utama pemetaan tidak mencukupi. Lumpuhkan pemadaman kelas untuk mengelakkan pemadaman yang tidak disengajakan oleh pasukan yang dirujuk oleh pelbagai perlawanan.
Atas ialah kandungan terperinci Bagaimana untuk memodelkan hubungan perlawanan pasukan dengan dua kunci asing dari jadual yang sama dalam kod rangka entiti terlebih dahulu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!