Bu yazıda bir MVC projesi üzerinden CodeFirst yaklaşımı ile Entity Framework Core kullanarak veritabanını ve proje ile veri tabanı arasındaki ilişkiyi oluşturacağız. Projenin senaryosu araba marka ve modellerinin listelendiği bir veri tabanı olacak.
İlk olarak CarsWebApp adında bir Asp.Net Core MVC projesi oluşturuyoruz. Ardından Models klasörü altına Car adlı bir sınıf oluşturuyoruz. Bu sınıf bizim entity modelimiz olacak.
using System.ComponentModel.DataAnnotations;
namespace CarsWebApp.Models
{
public class Car
{
public int Id { get; set; }
[Required]
public string Brand { get; set; }
[Required]
public string Model { get; set; }
}
}
Entity Framework’ü kullanabilmemiz için projeye dahil etmemiz gereken paketler bulunuyor. Bu paketleri Manage NuGet üzerinden isimlerini girerek ekleyebileceğimiz gibi Package Manager Console üzerinden de ekleyebiliriz. Ben bu yazıda Package Manager Console kullanacağım. Bunun için aşağıda bulunan 3 komutu çalıştırıyorum.
Install-Package Microsoft.EntityFrameworkCore
Install-Package Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.Tools
Paketlerin yükleme aşaması tamamlandıktan sonra sırada Database Context sınıfımızın oluşturulması yer alıyor. Bunun için CarsWebApp dizinin kök dizinine bir adet Data adında bir klasör oluşturup içine de ApplicationDbContext adında bir sınıf oluşturuyorum. Bu sınıf EntityFrameworkCore paketi ile birlikte gelen DbContext sınıfından miras alacak.
using Microsoft.EntityFrameworkCore;
namespace CarsWebApp.Data
{
public class ApplicationDbContext : DbContext
{
}
}
AplicationDbContext sınıfımızın kurucu metodunu oluşturuyoruz. EntityFrameworkCore paketiyle projemize dahil olan DbContextOptions generic sınıfının tipini AplicationDbContext olarak ayarlayıp kurucu metodun options tanımlaması ile bu parametreyi alacağını belirtiyoruz ve kurucu method vasıtasıyla gelen options nesnesini base sınıfa yani DbContext’e de gönderiyoruz.
using Microsoft.EntityFrameworkCore;
namespace CarsWebApp.Data
{
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{
}
}
}
Şimdi sıra model sınıfımız Car’ın, veritabanı tarafında tablo olarak oluşturulmasını sağlayacak işleme geldi. Bunun için EntityFrameworkCore paketi ile projemize dahil olan generic türdeki DbSet sınıfınadan bir property oluşturuyor ve tipini Car olarak belirliyoruz. İsmini de veri tabanı tarafında oluşturulmasını istediğimiz tablo ismi olarak ayarlıyoruz.
using CarsWebApp.Models;
using Microsoft.EntityFrameworkCore;
namespace CarsWebApp.Data
{
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{
}
public DbSet<Car> Cars { get; set; }
}
}
ApplicationDbContext sınıfıyla olan işimizi tamamladık. Sırada ConnectionString’imizi oluşturmak üzere projemizin appsettings.json dosyasını düzenlemek yer alıyor. Bunun için appsettings.json dosyamızı aşağıdaki gibi düzenliyoruz.
{
"ConnectionStrings": {
"ApplicationDbContextString": "Data Source=.; Database=CarsWebAppDB; Trusted_Connection=True"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
Yukarıda görüldüğü üzere JSON dosyasının üstüne, ConnectionStrings key’i ekledik ve bu key’e karşılık gelen değere ApplicationDbContextString adında bir key oluşturarak (istenildiği gibi isimlendirilebilir) bu key değerine karşılık da connection stringimizi tanımladık.
Şimdi sırada projemizin yaptığımız değişikliklere göre konfigüre edilmesi işlemi yer alıyor. Ancak bu kısmı 2 alt başlık halinde ele alacağız çünkü ASP.NET Core 6 ile birlikte Program.cs dosyası ile Startup.cs dosyaları altında yapılan işlemler birleştirilerek tek dosya olarak Program.cs altında yapılmaya başlandı ve bu sebeple işin bu aşamasında ufak bir fark dahi olsa ASP.NET Core 5 ile 6 yı bu aşama için ayrı ayrı inceleyeceğiz.
- ASP.NET CORE 5
Startup.cs dosyasında yer alan ConfigureServices isimli methodu aşağıdaki şekilde düzenliyoruz.
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("ApplicationDbContextString")));
services.AddControllersWithViews();
}
Yukarıda görüldüğü gibi 3. satırı dahil ediyoruz.
Program.cs dosyasında yer alan // Add services to the container. yorum satırının altını aşağıdaki şekilde düzenliyoruz.
// Add services to the container.
builder.Services.AddControllersWithViews();
builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("ApplicationDbContextString")));
Yukarıda görüldüğü gibi 3. satırı dahil ediyoruz.
Her iki sürüm içinde yapılan işlemi özetlemek gerekirse;
Generic yapıdaki AddDbContext metodunun tipini, oluşturmuş olduğumuz ApplicationDbContext olarak ayarlıyoruz. GetConnectionString metoduna da appsettings.json dosyasında tanımladığımız ApplicationDbContextString key’ini parametre olarak veriyoruz.
Son olarak Package Manager Console üzerinden;
add-migration InitialMigration
komutu ile migration işlemi gerçekleştiriyor ve
update-database
komutu ile de veritabanını oluşturuyoruz. Artık MS SQL Server üzerinden oluşturmuş olduğumuz CarsWebAppDB isimli veritabanımızı ve içinde bulunan Cars adlı tabloyu görebiliriz.
One thought on “ASP.NET Core – Entity Framework Core / Temel Yapılandırma ve Veritabanın Oluşturulması”