ASP.NET Core – Entity Framework Core / Seed Data Oluşturulması

Bir önceki yazıda Entity Framework Core kullanarak veritabanı ve proje ile veri tabanı arasındaki ilişkiyi oluşturmuştuk. Bu yazıda ise bir önceki yazımızda oluşturmuş olduğumuz veritabanına seed datalarının nasıl dahil edileceğini inceleyeceğiz. Seed data oluşturma işlemini iki farklı yöntem kullanarak gerçekleştireceğiz, ilk yöntemle başlayalım.

1. Migration İle Seed Data Oluşturma

Bir önceki yazıda oluşturduğumuz ApplicationDbContext sınıfımızı aşağıdaki şekilde düzenliyoruz.

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; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Car>().HasData(
                new Car()
                {
                    Id = 1,
                    Brand = "Hyundai",
                    Model = "Acccent Blue"
                },
                new Car()
                {
                    Id = 2,
                    Brand = "Fiat",
                    Model = "Linea"
                },
                new Car()
                {
                    Id = 3,
                    Brand = "Renault",
                    Model = "Megane"
                }
                );
        }
    }
}

Yukarıda görüldüğü üzere sınıfımız içinde OnModelCreating methodunu override ediyoruz. Metodun aldığı modelBuilder parametresi üzerinden, Entity(Car) metoduna seed dataları oluşturulacak model tipinin Car olduğunu belirtiyoruz. Ardından Car nesnesi tipinde bir diziyi parametre olarak bekleyen HasData() metoduna 3 adet Car nesnesi oluşturup parametre olarak veriyoruz ve aşağıdaki komut vasıtasyla yeni bir migration oluşturuyoruz.

add-migration SeedingDataMigration

Bu işlemin ardından;

update-database

diyerek yapılan değişikliklerin veritabanına aktarılmasını sağlıyoruz. MSSQL Server üzerinde CarsWebApp adlı veritanımızın Cars tablosunu kontrol ettiğimizde girmiş olduğumuz 3 adet araba marka ve model datasının veri tabanımızda oluşturulduğunu göreceğiz.

2. Proje Ayağa Kaldırılırken Seed Data Oluşturma

Bu yöntemde bir sınıf oluşturacağız ve bu sınıfı projenin ayağa kaldırılma aşamasında kullanarak, migration’a gerek kalmadan proje her ayağa kaldırıldığında, veritabanında ilgili modele karşılık gelen tablo değerleri boş ise bu tabloya seed dataları ekleyeceğiz. İlk olarak projemizin Data klasörü altına DataInitializer adlı bir sınıf oluşturuyor ve aşağıdaki şekilde düzenliyoruz.

using CarsWebApp.Models;


namespace CarsWebApp.Data
{
    public class DataInitializer
    {
        public static void DataSeed(IApplicationBuilder app)
        {
            using (var scope = app.ApplicationServices.CreateScope())
            {
                var context = scope.ServiceProvider.GetService<ApplicationDbContext>();

                if (!context.Cars.Any())
                {
                    context.Cars.AddRange(
                        new Car()
                        {
                            Brand = "Hyundai",
                            Model = "Accent Blue"
                        }, 
                        new Car()
                        {
                            Brand = "Fiat",
                            Model = "Linea"
                        }, 
                        new Car()
                        {
                            Brand = "Renault",
                            Model = "Megane"
                        }
                    );
                }

                context.SaveChanges();

            }
        }
    }
}

Yukarıdaki kodları inceleyelim; sınıfımız içinde DataSeed adında statik bir method oluşturduk. Bu metodun IApplicationBuilder türünde, app adında bir parametre alacağını belirttik. Bir scope oluşturup oluşturduğumuz scope değişkeni üzerinden ApplicationDbContext sınıfımızdan bir context nesnesi elde ettik. İlgili tablonun boş olup olmadığını kontrol edip tablo boş ise 3 adet Car nesnesini veri tabanına ekledik.

Şimdi sırada oluşturmuş olduğumuz bu sınıfı kullanmak yer alıyor. Bu işlemi ASP.NET Core 5 ve 6 için ayrı ayrı inceleyeceğiz.

  • ASP.NET CORE 5

Startup.cs dosyasının içindeki Configure metodunun en alt kısmına

DataInitializer.DataSeed(app);

kod parçacığını ekliyoruz.

  • ASP.NET CORE 6

Propram.cs dosyasının içinde

var app = builder.Build();

kod parçaçığının altına

DataInitializer.DataSeed(app);

kod parçacığını ekliyoruz.

Projeyi çalıştırdıktan sonra MSSQL Server üzerinde CarsWebApp adlı veritanımızın Cars tablosunu kontrol ettiğimizde girmiş olduğumuz 3 adet araba marka ve model datasının veri tabanımızda oluşturulduğunu göreceğiz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir