EntityFramework Core ile Many to Many (Çoka çok) İlişki

Bu gönderide ef core ile many to many yani çoka çok ilişki nasıl yapılır örneklerle beraber inceleyeceğiz.

Tanım

Çoka çok ilişkiyi örnekle açıklamak gerekirse şöyle ifade edebiliriz: her filimin birden çok oyunucusu vardır, her oyuncunun da birden çok filmi vardır.

Giriş

Aşağıdaki ef core paketlerini yükleyerek başlayalım

Install-Package Microsoft.EntityFrameworkCore

Install-Package Microsoft.EntityFrameworkCore.Tools

İlk olarak Post ve Tag adında iki tane ana entity’mizi tanımlayalım. Her postun birden çok tagi olabilir, her tagin de birden çok postu olabilir.

Çözüm 1

Post.cs

Tag.cs

Bu durumda bir migration oluşturduktan sonra ef core otomatik olarak ilişkileri oluşturacak ve PostTag adında ara tablo ekleyecek . Oluşturduğumuz bu tablo sadece veritabanında bulunacak yani class olarak erişemeyeceğiz.

Ek olarak fluent api ile de ilişkilerinizi tanımlayabilirsiniz.

Ara Tabloyu manuel olarak ekleme ve FluentApi ile ilişkilendirme (Çözüm 2)

Aşağıdaki yöntemin yukarıdakinden farkı ara tabloyu bizim oluşturmamızdır böylece kontrollerimizi ara tablo üzerinden yaparız.

PostTag.cs

Post.cs

Tag.cs

FluentApi
Crud işlemleri (Ekleme-Güncelleme-Silme)

Ekleme

Var olan Kayıda Ekleme

Güncelleme

Many to Many yani çoka çok ilişkilerde birden çok güncelleme senaryosu olabilir. Örneğin Post entity’sini güncelleyeceğiz ve content, title vs. geldi tagleri de bir request aracalığıyla string dizisi olarak aldık. Bu durumda şu senaryolarla karşı karşıya kalabiliriz.

  • Var olan tagler yeniden gelebilir, (Havuzdan alınması lazım)
  • Bütün tagler silinebilir
  • Yeni tagler eklenmiş olabilir (Tag tablosuna eklenmeli)

Bu üç olasılık aynı anda olabileceği nedeniyle bütün olayları tek bir code bloğunda halledebiliriz. ilk önce güncelleyeceğimiz entitynin bütün taglerini temizliyoruz. Daha sonra gelen tagleri varsa havuzdan bulup ekliyoruz yoksa yeni bir tag oluşturup öyle ekliyoruz.

Silme

Bir postun taglerini herhangi bir kısıtlama olmadan istediğiniz gibi silebilirsiniz böylece Tag tablosundan bir kayıt silersek başka bir post’un taginde de silmiş oluruz. Bu işlem CascadeDelete olarak geçer ve ilişkili alanları da kaldırır.

Gönderinin sonuna geldik, okuduğunuz için teşekkürler 🙂 başka bir gönderide görüşmek üzere.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

Turkish