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); }