.Net Core Entity Framework Code First Yaklaşımı

Coşkun Kurtuldu
4 min readFeb 11, 2019

--

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;

  1. 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.

.Net Core 2.2 class library projesi
.Net core 2.2 web projesi

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.

Student.cs
Grade Sınıfı
Courses.cs
StudentAddress.cs
StudentCourse.cs

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.

Student ile StudentAddres ile ilişki kurulmuş hali

Bu tablolar arasında bulunan ilişkileri aşağıdaki gibi görüntüleyebilirsiniz.

StudentConfiguration içerisinde bulunan builder yapılandırmasının açıklaması

Aynı şekilde StudentAddress.cs sınıfındaki ilişkimizi de aşağıdaki gibi yapılandıralım.

StudentAddress.cs sınıfının Student.cs sınıfı ile Bire-Bir ilişki yönteminin kurulmuş hali

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.

Student.cs sınıfı

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.

StudentCourses sınıfı ilişki yapılandırılmış hali

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.

appsettings.json üzerinde connection string eklenmiş hali

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.

Startup.cs dosyasının yapılandırılmış hali.

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.

Tablolarımızın ve ilişkilerinin oluşmuş hali

Çalışmanın tamamlanmış haline buradan ulaşabilirsiniz.

Faydalı olması dileğimle..

Kaynaklar:

http://www.entityframeworktutorial.net/

https://www.uykusuzadam.com/2017/01/fluent-api-nedir/

--

--

Responses (1)