Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk mengendalikan pelbagai kunci asing ke jadual yang sama dalam kod kerangka entiti terlebih dahulu?

Bagaimana untuk mengendalikan pelbagai kunci asing ke jadual yang sama dalam kod kerangka entiti terlebih dahulu?

DDD
Lepaskan: 2025-01-29 07:55:09
asal
544 orang telah melayarinya

How to Handle Multiple Foreign Keys to the Same Table in Entity Framework Code First?

Kod Rangka Kerja Entiti Pertama: Memproses Kekunci Luar Pelbagai Dalam Jadual Yang Sama

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
    }
}
Salin selepas log masuk

entiti pasukan termasuk dua pertandingan: homematches dan jam tangan.
  • entiti perlawanan mempunyai HomeTeamid dan GuestTeamID.
  • Dalam onModelCreating (), kami menggunakan API yang fasih untuk mengkonfigurasi hubungan. Ini boleh menghalang rujukan peredaran.
  • Kami secara eksplisit menetapkan
  • (atau
  • ) untuk mengelakkan penghapusan dari couplet tahap yang disebabkan oleh diri sendiri. OnDelete(DeleteBehavior.Restrict) DeleteBehavior.NoAction
  • Melalui kaedah ini, anda boleh berjaya menubuhkan pelbagai kunci luaran ke jadual yang sama dalam model teras EF. Ambil perhatian bahawa telah ditinggalkan dalam versi teras EF yang lebih baru, disyorkan untuk menggunakan
atau

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

Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan