Code First Yaklaşımı ile Entity Framework
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 :)