Dalam teras kerangka entiti, adalah penting untuk memodelkan hubungan antara -enthusiastic. Seperti yang anda hadapi, membuat model dengan kekunci luaran berganda dalam jadual yang sama boleh menyebabkan keabnormalan.
Dalam contoh anda, anda menentukan entiti pasukan dan perlawanan untuk menangkap hubungan antara pasukan dan permainan. Walau bagaimanapun, kaedah awal anda akan mencetuskan kelainan rujukan kitaran.
Untuk menyelesaikan masalah ini, anda mesti menggunakan konfigurasi API yang lancar dari Hasrequired () dan dengan kaedah () dan kaedah dengan (), serta kaedah dengan () dan onModelCreating (). Ini adalah model yang dikemas kini:
dalam model ini:
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; } } public class Context : DbContext { // ... protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Match>() .HasOne(m => m.HomeTeam) .WithMany(t => t.HomeMatches) .HasForeignKey(m => m.HomeTeamId) .OnDelete(DeleteBehavior.Restrict); // or DeleteBehavior.NoAction modelBuilder.Entity<Match>() .HasOne(m => m.GuestTeam) .WithMany(t => t.AwayMatches) .HasForeignKey(m => m.GuestTeamId) .OnDelete(DeleteBehavior.Restrict); // or DeleteBehavior.NoAction } }
entiti pasukan termasuk dua pertandingan: homematches dan jam tangan.
OnDelete(DeleteBehavior.Restrict)
DeleteBehavior.NoAction
. WillCascadeOnDelete(false)
akan menghalang operasi penghapusan, melainkan rekod yang berkaitan tidak wujud; Pilih yang mana bergantung pada keperluan khusus anda. OnDelete(DeleteBehavior.Restrict)
Atas ialah kandungan terperinci Bagaimana untuk mengendalikan pelbagai kunci asing ke jadual yang sama dalam kod kerangka entiti terlebih dahulu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!