Entity Framework - Migration - Code First

Veri tabanı işlemleri sırasında yeni bir tablo veya var olan bir tablo için kolona ihtiyacımız olabilir, tablolar arası ilişki oluşturabilir ya da ihtiyacımız olmayan bir tablo veya kolonu da veri tabanından silebiliriz. Ayrıca kolonun özelliğini değiştirebiliriz.Bu senaryolar tamamen ihtiyaca yönelik ortaya çıkar.

Code First ile veri tabanımızı kod kullanarak oluşturmuştuk. Yapacağımız bu değişiklikleri de kod kullanarak yapacağız. Kod kısmında yaptığımız değişikliklerin veri tabanına yansıtma işlemine Migration denir.

Migration işlemi için Visual Studio'da Tools menüsünden NuGet Package Manager -> Package Manager Console seçilir ve console ekranı açılır.

enable-migrations : Bu komut migration yapısını aktif etmemizi sağlar. İlk defa migrations oluşturduğumuzda Migrations isimli klasörümüz oluşacaktır. Bu klasörde Configurations class'ı oluşmuş olacaktır.


Configuration sınıfı DbMigrationsConfiguration sınıfından miras almıştır.

  internal sealed class Configuration : DbMigrationsConfiguration<ETicaretCodeFirst.Models.ETicaret>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
            AutomaticMigrationDataLossAllowed = false;
            ContextKey = "ETicaretCodeFirst.Models.ETicaret";
        }

        protected override void Seed(ETicaretCodeFirst.Models.ETicaret context)
        {
          
        }
    }

Constructor'ında bulunan AutomaticMigrationsEnabled özelliği false olduğu için veri tabanını otomatik olarak güncelleyemiyoruz bu yüzden her seferinde enable-migrations yazmamız gerekecektir. Bunu önlemek için bu özelliğe true değerini veriyoruz. Bu şekilde yaptığımız her değişiklik otomatik olarak veri tabanına yansıtılacaktır.

AutomaticMigrationDataLossAllowed özelliği ise veri tabanımızda bulunan verilerin güvenliğini sağlayan özelliktir eğer değerini false dediğimizde Migration işlemi sonrasında veri kaybına izin vermeyecektir. True dersek veri kaybını göze almış olacağız.

Kategori tablomuzda Ürünün Açıklamasını tutan bir kolon ekleyelim.




add-migration : Bu komut, yeni bir migration oluşturmamızı sağlar. Bu komutu yazdıktan sonra Enter'a bastıktan sonra bizden migration için isim bekleyecek ,ismi verdikten sonra Migration oluşacaktır. Oluşan bu migration, Migrations klasörü altında bulunur.

    public partial class KolonEkleme : DbMigration
    {
        public override void Up()
        {
            AddColumn("dbo.Urunler", "UrunAciklamasi", c => c.String());
        }
        
        public override void Down()
        {
            DropColumn("dbo.Urunler", "UrunAciklamasi");
        }
    }

KolonEkleme sınıfında Up metodu bu kolonun ekleneceğini, Down metodu iste bu kolonu silmek istediğimizde çalıştırılacak metottur. string türünden bir kolon ekledik ve bu kolon ürünün açıklamasını tutacaktır.

update-database: Bu komut, bizim kod kısmında kolon eklemek gibi değişiklikleri veri tabanına yansıtmamızı sağlayacaktır.





     Migration öncesi Urunler tablosu





Migration sonrası güncel Urunler tablosu




Temel olarak migration işlemi bu şekilde olmaktadır. Veri tabanında yaptığımız her değişiklikte update-database komutunu yazmak zorundayız. Yoksa değişkliklerimiz veri tabanına yansımayacaktır.


Yorumlar