MIGRATION MODİFİKASYONU BÖLÜM 3

Bu seferki migration düzenleme işleminde de mevcut bir tablodaki bir alanı yani bir kolonu silme işlemi yapalım. Yine Tur Model classım üzerinde çalışalım. En son eklediğim property GoruntulemeSirasi bunu kaldıralım, yorum satırı haline getirip ben pasif bi hale getiriyorum.

Dersin detaylı 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 TurAd { get; set; }
        // public int GoruntulemeSirasi { get; set; }
    }
}

Kaydedip, yeni bir migration oluşturmak için Package Manager Console’u açıyorum ve yine mantıklı bir isim vererek, add-migration SilGoruntulemeSirasiKolonTurTablosu komutumu kullanıyorum.

Migration oluşturuluyor. Burada aşağıdaki gibi bir uyarı alabilirsiniz. Bilgilendirme amaçlı vrilmiş bir uyarıdır.

An Operation was scaffolded that may result in the loss of data. Please review the migration for accuracy.

Burada demek istenilen veri kaybına sebebiyet verebilecek bir işlem yapıldı, lütfen migration doğruluğunu kontrol ediniz demekte..

using Microsoft.EntityFrameworkCore.Migrations;

namespace GRSYKitapEvi_DataAccess.Migrations
{
    public partial class SilGoruntulemeSirasiKolonTurTablosu : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropColumn(
                name: "GoruntulemeSirasi",
                table: "Turler");
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.AddColumn< int>(
                name: "GoruntulemeSirasi",
                table: "Turler",
                type: "int",
                nullable: false,
                defaultValue: 0);
        }
    }
}

Bu değişikliği yansıtmak için package manager console ekranımda update-database diyorum.

Database tarafında kontrol ettiğimde artık tablodan GoruntulemeSirası kolonu silinmiş durumda olduğunu görüyorum.

Yeni Örnek:

Şimdi bir örnek daha yapalım, bu sefer bir class silelim yani database tarafında bir tablo silme işlemi yapalım.

Bunu yapabilmek için önce ApplicationDbContext classıma gidiyorum, çünkü ben bir tablo sileceğim. Burada yer alan Turler tablosu için ilgili kısmı yorum satırı haline getirip, pasifize ettim.

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

Akabinde Package manager consoleda add-migration SilTurTablosu diyerek komutumu yazıyorum. Yapacağım işi özetler nitelikte bir isim verdim yine. Migration oluşturuluyor, yine aşağıdaki uyarıyı verebilir, çünkü silme işlemi yapılıyor içinde veriler varsa kayıp olacak.

An Operation was scaffolded that may result in the loss of data. Please review the migration for accuracy.

Database tarafında kontrolümü sağlıyorum ve Tur tablosunun artık olmadığını görüyorum.

İlgili migration kodları:

using Microsoft.EntityFrameworkCore.Migrations;

namespace GRSYKitapEvi_DataAccess.Migrations
{
    public partial class SilTurTablosu : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropTable(
                name: "Turler");
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.CreateTable(
                name: "Turler",
                columns: table => new
                {
                    TurId = table.Column< int>(type: "int", nullable: false)
                        .Annotation("SqlServer:Identity", "1, 1"),
                    TurAd = table.Column< string>(type: "nvarchar(max)", nullable: true)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_Turler", x => x.TurId);
                });
        }
    }
}

Ek olarak herhangi bir model class oluşturduğumuzda tabloda mutlaka bir primary key bulunmalıdır. Ve bu primary key alanına isim verirken içeriğinde Id ibaresinin geçmesi gerekmektedir. EFCore bu isimlendirme ile birlikte ilgili tabloda hangi alanın primary key olduğunu anlayabilir. İsim verirken KategoriId, ID, Id, KategoriId gibi isimler doğru bir kullanımken, Kategori_Id gibi bir kullanım yanlış kullanımdır hata verir.

Daha detaylı anlatım ve kod takibi için videoya mutlaka göz atınız. Bir sonraki derste görüşmek üzere.

Bir cevap yazın

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