MIGRATION OLUŞTURMA VE MIGRATION MODİFİKASYONU

Bir önceki dersimizde Kategori model classının tablo olarak database taravına eklenmesi için ilgili işlemlerimizi yaptık.  Şimdi türlere ilişkin bir model class daha ekleyelim. Bunun için yine Model katmanımda Models klasörüne sağ tıklıyor ve yeni bir class ekle diyorum.

Detaylı ders anlatımı ve kod takibi için video:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GRSYKitapEvi_Model.Models
{
    public class Tur
    {
        public int TurId { get; set; }
        public string Ad { get; set; }
    }
}

Model classımı yazdıktan sonra package manager console açıyorum ve migration oluşturuyorum. İsmini EkleTurTablosuDB veriyorum. Dolayısı ile pm console’da aşağıdaki komutu yazıyorum.

Add-migration EkleTurTablosuDB

Şimdi bunun sonucunda migration oluşturuldu. Bakıyorum içeriğine, içi boş sizce neden?

Nedeni şu bizim migration ekleme işlemimiz tamam ancak ben bu tablomu ApplicationDbContext kısmına yazmadım ki! Yani database tarafına push etme işini yapacak olan DbContext classıma bunu belirtmem gerekli. Bir önceki derste buna değindik. 😊

Buradan ApplicationDbContext classıma geliyor ve Tur tablosunu da ekliyorum.

using GRSYKitapEvi_Model.Models;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GRSYKitapEvi_DataAccess.Data
{
    public class ApplicationDbContext : DbContext
    {
        public ApplicationDbContext(DbContextOptions< ApplicationDbContext> options) : base(options)
        {

        }

        public DbSet< Kategori> Kategoriler { get; set; }
        public DbSet< Tur> Turler { get; set; }
    }
}

Hatamı henüz db tarafına yansıtmadığım yani aslında migration boş olduğu için diyelim, doğrudan Data Access katmanımda yer alan migration dosyasını silerek bu problemi aşabilirim, gidip bunu siliyorum.

Tekrar pm console ekranımda migration eklemek için komutumu yazıyorum.

Add-migration EkleTurTablosuDB

Migration oluşturuluyor, kategori için oluşturduğuma oldukça benzer şekilde.

using Microsoft.EntityFrameworkCore.Migrations;

namespace GRSYKitapEvi_DataAccess.Migrations
{
    public partial class EkleTurTablosuDB : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.CreateTable(
                name: "Turler",
                columns: table => new
                {
                    TurId = table.Column< int>(type: "int", nullable: false)
                        .Annotation("SqlServer:Identity", "1, 1"),
                    Ad = table.Column< string>(type: "nvarchar(max)", nullable: true)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_Turler", x => x.TurId);
                });
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropTable(
                name: "Turler");
        }
    }
}

Şimdi bunun database tarafına yansıması için PM console ekranımda;

Update-database diyorum.

Database tarafında da kontrol ettiğimde her şey tamam.

Şimdi gelelim migration üzerinde değişiklik nasıl yapılır?

Buna geçmeden önce bir önceki derste dediğimi tekrar hatırlatayım, migration oluşturmaktan çekinmeyin, mümkün olduğunca az değişiklik içeren migrationlarınız olsun, yani küçük küçük değişiklikler içersin. Çok fazla değişiklik içeren bir migration kafa karıştırabilir, güncelleme, modify işlemleri için kolay olmaz.

Biz şu ana kadar iki tane model class oluşturup, bunu database tarafına yansıttık.

Şimdi birkaç modifiye senaryosu yapalım. Bu modifiye işlemini birkaç videoda anlatacağım. Örnek olarak şimdi bir tane yapıp, var olan bir tabloya yeni bir property yani yeni bir alan ekleyelim.

Burada Tur tablomuza yeni bir proerty ekliyorum. Adını da GoruntulemeSirasi vereceğim, dolayısı ile Model katmanımda Models içinde Tur classıma geliyor ve kodlarımı düzenliyorum.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GRSYKitapEvi_Model.Models
{
    public class Tur
    {
        public int TurId { get; set; }
        public string Ad { get; set; }
        public int GoruntulemeSirasi { get; set; }
    }
}

Bu değişikliği uygulamak kolay, bunun için yine package manager console ekranımda yeni bir migration ekleme işlemi yapacağım. Aşağıdaki şekilde komutumu yazıyor ve isim veriyorum.

add-migration EkleGoruntulemeSirasiPropertyTurTablosu

şeklinde yazdım. Akabinde migration oluşturuluyor.

using Microsoft.EntityFrameworkCore.Migrations;

namespace GRSYKitapEvi_DataAccess.Migrations
{
    public partial class EkleGoruntulemeSirasiPropertyTurTablosu : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.AddColumn< int>(
                name: "GoruntulemeSirasi",
                table: "Turler",
                type: "int",
                nullable: false,
                defaultValue: 0);
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropColumn(
                name: "GoruntulemeSirasi",
                table: "Turler");
        }
    }
}

Migration içinde görüleceği üzere bu sefer migrationBuilder classında AddColumn metodu eklenmiş durumda.

Değişikliklerin db tarafına yansıması için pm console ekranımda;

Update-database diyorum. Ve değişiklikleri database tarafına yansıtıyorum.

Şimdilik bu kadar bir sonraki derste migration modifiye işlemlerine devam edeceğiz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir