Her projede olduğu gibi Code First yaklaşımıyla inşa ettiğimiz projemizde de güncellenmesi gerekecek noktalar kaçınılmaz olacaktır.
- Gençay Yıldız
- 07 Mayıs 2019
- 1257 kez görüntülendi.
Her projede olduğu gibi Code First yaklaşımıyla inşa ettiğimiz projemizde de güncellenmesi gerekecek noktalar kaçınılmaz olacaktır. Gerek kodlarda, gerekse de programın akışını sağlayan algoritmada düzenlenme olacaksa da bu yazımızı asıl ilgilendiren veritabanının güncellenmesi gereken durumlardır. Biliyoruz ki, Code First deseni uygulanan bir projede veritabanına direkt olarak müdahale etmek oldukça sakıncalıdır. Haliyle yapacağımız ekleme, çıkarma veyahut güncelleme durumlarını tabloları temsil eden classlar üzerinde gerçekleştirmeli ve Generate etmeliyiz.
Tabi şuana kadar yaptığımız tüm işlemleri SQL Server’dan fiziksel veritabanını silip, yeniden yükleyerek gözlemlemiş bulunmaktayız. İşte, Migration yapıları sayesinde yaptığımız yenilikleri Visual Studio üzerinden hızlıca fiziksel veritabanına yansıtabileceğiz. Anlayacağınız, kod kısmında yaptığımız değişiklikleri veritabanına yansıtmaya Migration demekteyiz.
Migrations yapısını kullanabilmek için bize “Package Manager Console” penceresi gerekmektedir. Eğer ilgili pencere sizde açık değilse “Tools” -> “NuGet Package Manager” -> “Package Manager Console” kombinasyonunu takip ederek açabilirsiniz.
Migrations yapısını aktifleştirmek için “Package Manager Console” üzerinden “enable-migrations” komutunu kullanmalıyız.
Şimdi üzerinde çalıştığımız bir projede Migrations yapısını aktifleştirelim.
Bu işlemi yaptıktan sonra projemizde aşağıdaki gibi “Migrations” isimli bir klasör oluşmaktadır.
İlgili klasör içerisinde Migrations ayarlarını gerçekleştireceğimiz “Configuration.cs” isimli dosyamız mevcuttur. Dosyamıza şöyle bir göz atarsak eğer;
namespace EF.Migrations { using System; using System.Data.Entity; using System.Data.Entity.Migrations; using System.Linq; internal sealed class Configuration : DbMigrationsConfiguration<EF.Model.Context.OkulDBContext> { public Configuration() { AutomaticMigrationsEnabled = false; } protected override void Seed(EF.Model.Context.OkulDBContext context) { // This method will be called after migrating to the latest version. // You can use the DbSet<T>.AddOrUpdate() helper extension method // to avoid creating duplicate seed data. E.g. // // context.People.AddOrUpdate( // p => p.FullName, // new Person { FullName = "Andrew Peters" }, // new Person { FullName = "Brice Lambson" }, // new Person { FullName = "Rowan Miller" } // ); // } } }
“Configuration.cs” sınıfını şöyle bir incelersek eğer “DbMigrationsConfiguration” sınıfından kalıtım alarak Context sınıfımıza işaretlenmiştir. Bunun yanında constructurında “AutomaticMigrationsEnabled” özelliğine “false” değeri atanmıştır. Bu(AutomaticMigrationsEnabled) özelliği sayesinde otomatik olarak veritabanını güncelletebiliyoruz. Haliyle “false” değerde olunca bu özellik kapalı olmaktadır. O yüzden “true” değerini set ediyoruz.
internal sealed class Configuration : DbMigrationsConfiguration<EF.Model.Context.OkulDBContext> { public Configuration() { AutomaticMigrationsEnabled = true; } . . . }
Bu işlemlerden sonra gelin veritabanını güncelleyelim.
Gördüğünüz gibi veritabanı “update-database” komutu sayesinde anında güncelleyebildik. Tabi ilk güncelleştirmede veritabanıda yoksa oluşturulmaktadır.
Yeni tablo eklediğinizde ya da var olan bir tabloya ekleme, çıkarma veyahut güncelleme yaptığınızda “update-database” komutunu çalıştırmanız yeterlidir.
AutomaticMigrationDataLossAllowed Özelliği
“AutomaticMigrationDataLossAllowed” özelliğinden bahsetmezsek olmaz. Yapacağınız tablo güncelleme durumlarında, tablonun dolu olma olasılığında varsayılan olarak veriler güvence altına alınmaktadır. Bizde bu(AutomaticMigrationDataLossAllowed) özellik sayesinde bu durumu aşabilmekte ve verilerin güvenirliğini göz ardı edebilmekteyiz. Doğal olarak ilgili özellik “false” default değerine sahiptir. Biz constructurda ilgili özelliği çağırarak “true” değerini set edebiliriz.
internal sealed class Configuration : DbMigrationsConfiguration<EF.Model.Context.OkulDBContext> { public Configuration() { AutomaticMigrationsEnabled = true; AutomaticMigrationDataLossAllowed = true; } . . . }
Migrasyon Ekleme
Model değişiklikleri için migrasyon eklemek için “Add-Migration” komutunu kullanarak “Add-Migration [Migrasyon Adi]” prototipini uygulayabilirsiniz.
Gördüğünüz gibi migrasyonuda bu şekilde eklemekteyiz.
Gençay Yıldız ın tüm makalelerine bu linkten ulaşabilirsiniz.
Bu yazıya 0 yorum yapılmış.