Entity Framework Core - Bire Çok İlişkili Tablolarla Çalışmak

Entity Framework Core'de tanımlanan ilişki türlerinden bire çok (One to Many) ilişki, "bir tablodaki bir verinin, diğer tablodaki birden fazla veri ile ilişkisi olduğu" ilişki türüdür.

Örnek olarak; bir departmana ait, birden fazla personel bulunması verilebilir. Kullanılan entityler: Department - Personal

Entityler arasında bire çok ilişki tanımlayabilmek için entitylerde aşağıdaki gibi navigation property adı verilen propertyler eklenmelidir. 

Department sınıfında List<Personal> tipinde liste verilmesi, bir departmana bağlı personelleri belirtir. Code first ile ilişki kurarken varsayılan olarak bire çok ilişkiyi algılayacaktır. Aynı zamanda departman tanımlarken aynı anda bu departmanla ilişkili personelleri de tanımlayabiliriz. 

Personal sınıfındaki DepartmentId property ise otomatik olarak Departman tablosundaki Id kolonunun foreign key olarak işaretlenmesini sağlayan bir kullanımdır. 

Yukarıdaki kod bloğunda Personal sınıfı için oluşturulan ilgili mapping sınıfında FluentAPI metotlarından HasOne ve WithMany kullanıldı. Kullanırken navigation propertylerden yararlanıldı. Kodu bir departman, birden fazla personel ile ilişkili olur şeklinde okuyabiliriz. 

Migration işlemini gerçekleştirdikten sonra veri tabanında tablolar ve keyler, aşağıdaki gibi yansıyacaktır.

Diyagramdan da ilişki anlaşılacaktır.
Geliştirmeleri veri tabanına yansıttıktan sonra, verilerle çalışma işlemine geçebiliriz. 

Yeni bir kayıt ekleme - Insert işlemi için örnek kodumuz

Personel listesi oluşturulup, departmana bağlanmasıdır. Department tablosundaki Personals propertysine personeller atanır. Departman bilgisi tanımlandıktan sonra Add metodu ile eklenip, SaveChanges metodu ile veri tabanına yansıtma işlemi yapılır.

Kayıt güncelleme - Update için örnek kodumuz

Öncelikle güncelleme yapılacak kayıt bulunduktan sonra, ilgili entitye ait state bilgisi Modified olarak atanır. Sebebi veri tabanından gelen her bir verinin state bilgisi Unchanged olarak gelir. Güncelleme aşamasında Modified yapılmalıdır.

Örnek kodumuzda personel kaydı güncellemek için personel listesini explicit loading yöntemiyle Collection metodu kullanarak alabiliriz. Bu işlemi yapmazsak null olarak gelir. Yükleme öncesi ve sonrasındaki görünümler aşağıdaki gibidir.


Collection metodu List türündeki navigation propertylerde kullanılır. Listeyi aldıktan sonra güncelleme işlemini yaptıktan sonra SaveChanges metodu ile veri tabanına yansıtma işlemi yapılır.

Listeleme için örnek kodumuz 

Güncelleme aşamasında kullandığımız explicit loading yöntemiyle ilişikli personelleri çekebiliriz.

Silme için örnek kodumuz

RemoveRange metodu ile silmek istediğimiz entityi bulup SaveChanges metodu ile veri tabanına yansıtma işlemi yapılır. Böylece ilişkili iki tablodan da verileri siler.

Bu yazımda Entity Framework Core'da bire çok ilişkili tablolarla çalışmaktan bahsedip; ilişki kurmanın yanı sıra ekleme, güncelleme, listeleme ve silme işlemine değindim. 

Keyifli ve faydalı olmasını umarak, çalışmalarınızda kolaylıklar diliyorum...

Yorumlar