Rumah >pembangunan bahagian belakang >C++ >Bagaimana cara memetakan dua kunci asing dari jadual yang sama dalam kod rangka entiti pertama?
) 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:
<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; } } 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>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
<code class="language-csharp">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 }</code>Konfigurasi ini secara eksplisit memetakan kunci asing dan yang penting, menetapkan
untuk mengelakkan penghapusan pasukan yang tidak disengajakan apabila perlawanan dipadamkan. WillCascadeOnDelete(false)
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!