Code First Yaklaşımı ile Entity Framework

Nuray Kılıç
4 min readDec 30, 2022

--

Herkese selamlar. Nasılsınız umarım iyisinizdir…

ORM araçlarından bahsettiğim yazımda Code First yaklaşımından da bahsetmiştik. Şimdi ise Code First yaklaşımını Entity Framework ile adım adım uygulayacağım.

Umarım okumaktan keyif alırsınız…

Step 1 :

  • Asp.Net Core Web API projesi oluşturuyoruz. .Net 6.0 sürümü ile yapacağım.

Step 2 :

  • Gerekli packageleri NuGet Package Manager’dan, dotnet CLI veya Package Manager Console’dan yükleyebilirsiniz.
  • Package’ler için nuget.org’dan faydalanacağım. Package Manager Console kullanacağım ve yükleyeceğimiz package’lerimiz de şöyle:
NuGet\\Install-Package Microsoft.EntityFrameworkCore -Version 6.0.1
NuGet\\Install-Package Microsoft.EntityFrameworkCore.Design -Version 6.0.1
NuGet\\Install-Package Microsoft.EntityFrameworkCore.Tools -Version 6.0.1
NuGet\\Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 6.0.1
  • Database için Sql Server kullanacağım, farklı bir database kullanacaksanız ilgili database’in package yükleyebilirsiniz.

Step 3 :

  • Entitylerimizin olduğu bir klasör oluşturup, entitiylerimizi oluşturacağız.
  • Entitylerimizi oluştururken table’ların birbirleriyle olan ilişkilerini de property olarak yazıyoruz.

Student Class :

public class Student
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime EnrolmentDate { get; set; }

public ICollection<Enrollment> Enrollments { get; set; }
}

Enrollment Class için bir de enum oluşturduk.

public class Enrollment
{
public int EnrollmentId { get; set; }
public int CourseId { get; set; }
public int StudentId { get; set; }
public Grade? Grade { get; set; }
public Course Course { get; set; }
public Student Student { get; set; }
}

public enum Grade
{
A,
B,
C,
D,
F
}

Course Class için Data Annotations kullandık.

  • Data Annotations, oluşturduğumuz propertye özellik eklemek ve validation yapmak için kullanıyoruz.
  • Bir çok kullanımı bulunmakla birlikte aşağıdaki DatabaseGenerated alanını None olarak belirtmemiz CourseId property’sinin database tarafından oluşturulmak yerine kullanıcı tarafından oluşturulmasını sağlıyor.
  • Daha fazla incelemek isterseniz: Microsoft Data Annotations
    public class Course
{
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int CourseId { get; set; }
public string CourseName { get; set; }
public int Credits { get; set; }
public ICollection<Enrollment> Enrollments { get; set; }
}

Step 4 :

  • Database işlemlerimiz için yeni bir folder oluşturup, Context classımızı oluşturuyoruz.
  • Context classımız DbContext’ten kalıtım almalıdır. Daha Sonra constructor’ımızı oluşturup base’den den kalıtım alıyoruz.
  • Databasede oluşturmak istediğimiz table’leri DbSet ile ekliyoruz.
public class SchoolContext : DbContext
{
public SchoolContext(DbContextOptions<SchoolContext> options) : base(options) { }

public DbSet<Student> Students { get; set; }
public DbSet<Course> Courses { get; set; }
public DbSet<Enrollment> Enrollments { get; set; }
}
  • Tablelarımızı, override edebileceğimiz OnModelCreating methodu ile configure edebiliriz.

Step 5 :

  • Appsettings.json dosyamıza ConnectionString ekliyoruz.
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"DbConnectionString" : "Server=(localdb)\\mssqllocaldb;Database=SchoolDB;Trusted_Connection=True;"
}
}
  • Program.cs dosyasımızdaki Services ile uygulama başlama sırasında dependency injection yöntemiyle uygulamaya register ediyoruz.

builder.Services.AddDbContext<SchoolContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("DbConnectionString")));

Step 6 :

  • Son olarak migration işlemlerini gerçekleştirerek database’imizi oluşturacağız.
  • Migration işlemini Package manager console’dan yapacağız ve yaparken eğer katmanlı mimari kullanıyorsanız Default Project alanında context classınınız bulunduğu katmanı seçmelisiniz.

Migration işlemleri için sık kullanacağımız iki komuttan bahsetmek istiyorum.

- add-migration commandName : Bu komut ile bir Migrations dosyası oluşturulur, dosyadaki classta Up ve Down olmak üzere iki method oluşur. Methodlarda entitylerimizin özelliklerinin database’e nasıl yansıtıldığı yer alır.

- update-database : Database’in fiziksel olarak oluşturulmasını sağlar.

  • Eğer daha sonra entitylerimizde herhangi bir değişiklik yaparsak add-migration ve update-database ile database’i güncelleyebiliriz.

Done.

Son olarak database’imiz bu şekildedir:

Kaynaklar

Örneği github hesabımda bulabilirsiniz.

Beni LinkedIn hesabımdan takip edebilir veya bağlantı kurabilirsiniz. Zamanınızı ayırdığınız için teşekkürler. Kendinize iyi bakınn :)

--

--