.Net Core Entity Framework Code First Yaklaşımı
Herkese Merhabalar,
Bu yazımda sizlere .Net core codefirst yaklaşımında ilişkisel tablo tasarımından bahsetmeye çalışacağım.
Öncelikle Entity Framework nedir onu inceleyelim.
Entity Framework: .Net platformunda ORM(Object Relational Mapping) araçlarından birisidir. ORM (Object Relational Mapping) ise veritabanı ile nesneye yönelik programlama (OOP) arasındaki ilişkiyi kuran teknolojidir. Yani Entity Framework, nesne tabanlı programlamada veritabanındaki tablolara uygun nesneler oluşturma tekniğidir.
Entity Framework ile 3 farklı yöntem ile proje geliştirilebilir. Bu yöntemler;
- Model First (New Database)
2. Database First (Existing Database)
3. Code First (New Database)
Model First (Önce Model): Bu yöntemde Visual Studio üzerinde boş bir model dosyası (.edmx) eklenerek veri tabanı bu model üzerinde tasarlanır. Derleme adımında verilen script dosyasi ile veri tabanı oluşturulur.
Database First (Önce Veritabanı): Bu yöntemde hali hazırda var olan veritabanı projeye model dosyası ile bağlanır ve gerekli class’lar EF tarafından üretilir. Daha önceki tecrübelerimden yola çıkarak veritabanına yapılacak eklemelerde mevcut versiyon Ef 6 da sorunlar yaşamıştım. kod daki classlarin ilişkilerini tam yapamadığı için bu yöntemi kullanmaktan uzak durmaktayım (giriş seviyesindeki en kolay yöntemde budur.
Code First (Önce Kod — Yeni Veritabanı): Bu yöntemde classlar ve mapping kodları yazılımcı tarafından oluşturulur. Daha sonra veri tabanı bu class’lardan türetilir.
Biz entity framework yöntemlerinden codefirst yaklaşımı kullanarak veritabanı tablo ve ilişkilerini Class(sınıf) yardımıyla oluşturarak işleyişimizi devam ettireceğiz.
Veritabanı ilişki türleriyle ilgili bilgi almak için buradan veya burada bulunan adreslerden erişebilirsiniz.
Öncelikli olarak yeni bir .net core class projesi ve web projesi oluşturuyorum.
Oluşturduğumuz her iki proje için package manager console üzerinden Entity framework core paketini Install-Package Microsoft.EntityFrameworkCore -Version 2.2.1 komutu ile indiriyoruz.
Yapımızı oluşturduktan sonra şimdi tablo yapılarımızı oluşturalım. 5 adet tablo oluşturup; bire-bir, bire-çok, çoka-çok ilişki türlerinin tümünü bu 5 tablo üzerinden tarif etmeye çalışalım.
Student(Öğrenci), Grade(Sınıf), StudentAddress(Öğrenci Adres), Course(Kurs) ve StudentCourse(Öğrenci kurs) modellerini oluşturalım.
Yukarıda görüldüğü üzere modellerimi oluşturdum. Şimdi sıra geldi tablolarım arasındaki ilişkileri oluşturmaya..
Bire-bire (1–1) ilişki yöntemi:
Oluşturmuş olduğumuz Student ve StudentAddress sınıfları arasında olan ilişki türüdür.
Bu ilişki yöntemi için Student.cs ve StudentAddress.cs sınıflarında ilişkilerimizi yapılandıralım.
Bu iki tablo arasında 1–1 ilişki kurulurken Fluent Api yöntemini kullanacağım.
Bu tablolar arasında bulunan ilişkileri aşağıdaki gibi görüntüleyebilirsiniz.
Aynı şekilde StudentAddress.cs sınıfındaki ilişkimizi de aşağıdaki gibi yapılandıralım.
Bire-çok (1-n) ilişki yöntemi :
Oluşturmuş olduğumuz Student ve Grade sınıfları arasında kurulan ilişki bu yönteme örnektir.
Student ve Grade sınıflarını bire-çok ilişki yöntemine göre yapılandıralım.
Yukarıdaki kodu adım adım anlayalım.
- Öncelikle, student sınıfımızı yapılandırmamız gerekeceği için builder olarak student sınıfını belirtiyoruz.
- Ardından, grade sınıfının bir adet özelliği içerdiğini belirtiriz.
.HasOne<Grade>(s => s.CurrenctGrade)
- Şimdi, ilişkinin diğer ucunu,
Grade
sınıfını yapılandırmamız gerekiyor ..WithMany(g => g.Students)
ifadesi ile bir Grade üzerinde birden fazla Student bulunabileceğini belirtiyor. - İsteğe bağlı olarak yabancı anahtar özelliğinin adını belirtebiliriz . CurrentGradeId alanıyla birlikte bu ilişki türündeki foreign key (yabancı anahtar)'i belirtiyoruz.
.HasForeignKey<int>(s => s.CurrentGradeId);CurrentGradeIdId
Bu iki tablo arasında bulunan ilişkileri aşağıdaki resimde daha detaylı bir şekilde görüntüleyebilirsiniz.
Çoka-çok (N-N) ilişki yöntemi:
Oluşturmuş olduğumuz student ve course tablosu arasında oluşacak ara tablo StudentCourses tablosu için ilişkilerimizi yapılandıralım.
StudentCourses tablosu için oluşturmuş olduğumuz sınıfımızı aşağıdaki gibi yapılandırıyoruz.
Yukarıdaki resimde StudentCourse sınıfının Stıudent ve Course ile çoka çok şekilde yapılandırılmış olduğunu görmekteyiz.
Entity sınıfı içerisinde tüm bu işlemlerimizi tamamladıktan sonra web projemizde yapılandırma işlemlerimizi tamamlayalım.
Web projesi içerisinde bulunan appsettings.json dosyası içerisine connectionString adresimizi belirtelim.
Startup.cs dosyası üzerinde entity projesinde oluşturduğumuz context sınıfımızı ve connectionString için oluşturmuş olduğumuz connectionString verisini belirtiyoruz.
Tüm bu ayarlamaları tamamladıktan sonra başlangıç projesini web projesi olarak seçip, tablolarımızı Nuget Package Manager console üzerinden oluşturalım. Bu işlemleri yaparken Default project olarak entity projesinin seçilmesi gerekmektedir.
Bu işlemleri tamamladıktan sonra Add-Migration “Migration ismi” ve Update-database komutlarını çalıştırarak modellerini oluşturduğumuz kayıtların veritabanında tablolarını ve ilişkilerini görüntüleyebiliriz.
Çalışmanın tamamlanmış haline buradan ulaşabilirsiniz.
Faydalı olması dileğimle..
Kaynaklar: