EF Core çoktan çoğa ilişki nasıl oluşturulur?

Entity Framework Core ile çoktan çoğa veritabanı ilişkileri kurmak istediğinizde maalesef Entity Framework 6‘da olduğu gibi ilişki tablosu ve tablolar arası bağlamlar henüz otomatik oluşturulmuyor. Microsoft ve .NET topluluğu EF Core’daki bu eksikliğin önümüzdeki sürümlerde giderileceğini duyurdu.

EF Core ile çoktan çoğa veritabanı ilişkisini kurabilmek için öncelikle iki tane sınıfı belirleyelim, bu örnekte “Haber” ve “Kategori” sınıflarını kullanarak tablolar arasında çoktan çoğa ilişkisini kuralım. Öncelikle model sınıflarımızı oluşturalım;

public class Haber
{
public int HaberId { get; set; }
public string Baslik { get; set; }
public string Metin { get; set; }
public ICollection<HaberKategori> HaberKategoriler { get; set; }
}
public class Kategori
{
public int KategoriId { get; set; }
public string Ad { get; set; }
public ICollection<HaberKategori> HaberKategoriler { get; set; }
}

EF Core Çoktan Çoğa Tablosu Oluşturmak

Sınıflarımızı oluşturduğumuza göre şimdi iki model sınıfına ait çoktan çoğa ilişki oluşturmak için bağlam model sınıfını yazalım;

public class HaberKategori
{
public int HaberId { get; set; }
public Haber Haber { get; set; }
public int KategoriId { get; set; }
public Kategori Kategori { get; set; }
}

Fluent API Kullanarak Çoktan Çoğa Tanımlaması Yapmak

Sınıfları oluşturduktan sonra ilişkinin başarılı şekilde eşleştirilebilmesi gerekir. Bu yüzden EF Core için Fluent API üzerinden yapılandırma oluşturacağız. DbContext sınıfınızın içerisinde yer alan OnModelCreating aksiyon metodunun içerisine bu yapılandırmayı yazmanız gerekir;

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<HaberKategori>()
.HasKey(hk => new { hk.HaberId, hk.KategoriId });

modelBuilder.Entity<HaberKategori>()
.HasOne(hk => hk.Haber)
.WithMany(h => h.HaberKategoriler)
.HasForeignKey(hk => hk.HaberId);

modelBuilder.Entity<HaberKategori>()
.HasOne(hk => hk.Kategori)
.WithMany(k => k.HaberKategoriler)
.HasForeignKey(hk => hk.KategoriId);
}

Okuma Önerisi: .NET Core nedir?

Tukan Ajans


Phone number:

0(850) 346 80 34‬

Follow us: