Bu makalede Entity Framework Core ile veri tabanı işlemleri yapmanın yanı sıra, Migration aracı ile veri tabanı yapısında yapılan değişikliklerin kod olarak kaydedilip, uygulama üzerinden eşitlenmesi işleminin önemi üzerinde durulmaktadır Add-Migration ve Update-Database komutlarının kullanımı anlatılırken, geri alma işlemi yaparken dikkat edilmesi gereken noktalara da vurgu yapılır Migration'lar arasında senkronizasyon sağlamak için her bir geliştiricinin değişikliklerini kaydetmesi gereklidir
Bu makalede, .NET projesinde veri tabanı işlemleri yapmak için kullanılan Entity Framework Core Migration aracı ele alınacaktır. Entity Framework Core, .NET projesinde ORM (Object Relational Mapping) işlemleri yaparken, Migration ise veri tabanı yapısında yapılan değişiklikleri kod olarak kaydedip, uygulama üzerinden veri tabanı yapısını eşitlemek anlamına gelir. Bu sayede projenizdeki veri tabanı yönetim işlemlerini kolay bir şekilde gerçekleştirebilirsiniz.
Entity Framework Core Nedir?
Entity Framework Core, .NET platformunda veri tabanı işlemleri yapmak için kullanılan bir ORM (Object Relational Mapping) aracıdır. ORM, veri tabanı ile programlama dili arasındaki farklılıkları gidermek için kullanılır. Bu sayede, bir programcı veri tabanını kullanırken, direkt SQL sorgusu yazmak yerine ORM aracılığıyla nesne yönelimli programlama teknikleri kullanarak veri tabanı işlemlerini gerçekleştirebilir.
Entity Framework Core, .NET projelerinde veri tabanı işlemlerini kolaylaştırır ve veri tabanı yapısında değişiklik yapmak için de oldukça kullanışlıdır. Migration özelliği sayesinde veri tabanında yapılan değişikliklerin kod olarak saklanması ve sonrasında projeye uygulanması mümkün hale gelir. Ayrıca Entity Framework Core, açık kaynak kodlu bir projedir ve Microsoft tarafından sürdürülmektedir. Bu sayede, sürekli güncellenerek daha yeni özellikler ve iyileştirmeler eklenir.
Migration Nedir?
Entity Framework Core ile veri tabanı yapısı ve işlemleri kolay bir şekilde yönetilebilir. Bunun en önemli yollarından biri de Migration kullanımıdır. Migration, Entity Framework Core ile veri tabanı yapısında yapılan değişiklikleri kod olarak kaydedip, daha sonra uygulamaya uygulama üzerinden veri tabanı yapısını eşitlemek anlamına gelmektedir. Yani, bir veri tabanı değişikliği yapılmadan önce, Entity Framework Core Migration kullanılarak kod üzerinde yapılır. Bu sayede, veri tabanında yapılacak olan değişiklikler daha önceden kodlanmış ve kaydedilmiş olur. Sonrasında ise, bu yapılan değişiklikler uygulama üzerinden veri tabanına yansıtılır. Bu sayede, veri tabanı işlemleri yönetilirken güvenli bir yol izlenmiş olunur.
Migration Oluşturma
Entity Framework Core Migration kullanarak .NET projesinde veri tabanı yönetimi yapmak oldukça kolay ve hızlı bir işlemdir. Bu işlem için öncelikle proje içinde Entity Framework Core bağımlılıklarının yüklü olması gerekmektedir. Eğer henüz yüklü değilse NuGet Package Manager üzerinden kolaylıkla yüklenebilir.
Migration oluşturmak için konsolda Add-Migration komutu çalıştırılmalıdır. Bu aşamada oluşturulan migration sınıfı, veri tabanında yapılacak olan değişiklikleri içerir. Migration sınıfının oluşturulması sonrasında, proje içindeki DbContext sınıfındaki Database.Migrate() metodu çalıştırılarak veri tabanı güncelleştirilir.
Migrations akışına uygun şekilde ilerlemek oldukça önemlidir. Ayrıca, birden çok geliştiricinin bir projede çalışması halinde, her bir geliştiricinin değişikliklerini migration olarak kaydetmesi gereklidir. Bu sayede, veri tabanı yapıları sorunsuz bir şekilde senkronize edilebilir.
Add-Migration Komutu
Migration yapmak için konsolda Add-Migration komutu kullanılabilir. Bu komut ile Entity Framework Core, veri tabanında yapılacak olan değişiklikleri içeren migration sınıfını oluşturur. Migration sınıfı, veri tabanındaki tablo ve sütunların eklendiği, silindiği ya da değiştirildiği gibi yapısal değişiklikleri içerir.
Örneğin, bir veri tabanında yeni bir tablo eklemek istediğimizde Add-Migration [migrationAdi] komutunu kullanarak migration sınıfı oluşturabiliriz. Bu sınıf içerisine, yeni tablonun alanlarının isimleri, tipi, uzunluğu ve zorunlu olup olmadığı gibi özellikleri tanımlayabiliriz.
Add-Migration komutu kullanılması ile oluşturulan migration sınıfı, veri tabanındaki yapısal değişiklikleri kod olarak barındırır. Bu sınıf, Entity Framework Core tarafından, uygulama çalıştığında veri tabanının otomatik olarak güncellenmesinde kullanılacaktır.
Update-Database Komutu
Migration oluşturulduktan sonra, veri tabanı yapısındaki değişikliklerin uygulanması için DbContext sınıfındaki Database.Migrate() metodu kullanılır. Bu metod, veri tabanındaki migration tablosunu kontrol eder ve güncelleştirilmesi gereken migration'ları işaretler. Daha sonra, migration sınıfı içerisindeki kodların veri tabanına uygulanması ile birlikte veri tabanı güncellenir.
Bu sayede, veri tabanında yapılan değişikliklerin proje üzerinde uygulanması kolaylaşır ve manuel işlemlere gerek kalmaz. Ayrıca, migration'lar arasında geçiş yapmak için de bu komut kullanılabilir.
Migration Geri Alma
Entity Framework Core Migration ile geri alma işlemi oldukça kolaydır. Bunun için konsolda Remove-Migration komutu çalıştırılması yeterlidir. Bu komut sonrasında oluşturulan migration sınıfı silinerek, veri tabanında yapılan değişiklikler geri alınır. Ancak bu işlem sırasında dikkat edilmesi gereken nokta, geri alma işlemi sonrasında veri tabanı yapısında birçok değişikliğin yapılamayacağıdır. Bu nedenle, geri alma işlemi yapılması gerektiğinde mutlaka dikkatli olunmalı ve geri alma işlemi sonrasında veri kaybı yaşanmaması için gerekli kontroller yapılmalıdır.
Ayrıca, birden çok geliştiricinin bir proje üzerinde çalışması durumunda, her bir geliştiricinin yaptığı değişiklikler migration olarak kaydedilmelidir. Bu sayede, geri alma işlemi sırasında herhangi bir sorun yaşanmaz ve veri tabanında tutarlılık sağlanır.
Migration Kullanımında Dikkat Edilmesi Gereken Noktalar
Bir yüksek seviye yazılım projesi üzerinde çalışırken birden fazla geliştiricinin aynı anda değişiklik yapması oldukça olasıdır. Bu durumda her bir geliştiricinin yaptığı değişiklikleri migration olarak kaydetmesi gereklidir. Bu sayede proje üzerindeki değişiklikler tarihsel olarak takip edilebilir ve eski versiyonlara geri dönülebilir.
Ayrıca birden fazla geliştiricinin aynı anda çalışması durumunda bazı çakışmalar meydana gelebilir. Bu çakışmalar engine tarafından algılanır ve migration oluşturulurken çözüm işlemleri yapılarak veri kaybı yaşanması önlenir. Bu sayede projede herhangi bir hata oluşmadan rahatlıkla çalışılabilir.
Data Loss Uyarısı
Migration işlemleri sırasında dikkat edilmesi gereken bir yönetim adımı olarak Data Loss uyarısı gösterilebilir. Bu uyarı, var olan bir tablodaki sütunların silinmesi veya yeni bir tablo oluşturulurken script sonrası tablonun oluşmaması durumunda verilir. Veri kaybının önlenmesi için, yürütülen işlemin dikkatlice kontrol edilmesi ve verilerin yedeklenmesi gereklidir. Migration işlemi gerçekleştirmeden önce mutlaka bir yedek alma işlemi yapılması, veri kaybı durumunda geri dönüş sağlar. Aynı şekilde, yeni bir tablo oluşturulurken de, script işleminin doğru yapıldığından emin olmak ve oluşan hataları düzeltmek gerekir.
Seed Metodu
Entity Framework Core Migration, veri tabanı yönetimi için birçok kullanışlı yöntemler sunar. Bunlardan birisi de Seed() metodudur. Bu metod sayesinde veri tabanına test verisi eklemek mümkündür. Seed() metodu, DbContext sınıfı içinde tanımlanarak override edilmelidir.
Seed() metodu sayesinde oluşturulan veri tabanı örnekleri açılırken kayıtların doğru şekilde eklenmesi sağlanabilir. Bu metodun kullanımı oldukça basittir. Veri tabanında eklemek istediğiniz tüm test verilerini Seed() metodu içinde tanımlayabilirsiniz.
Seed() metodu, veri tabanı oluşturma aşamasında çalıştırılabildiği gibi, migration sonrasında da çalıştırılabilir. Örneğin, test verilerinizi yeni bir migration oluşturduktan sonra veri tabanına eklemek isterseniz, Seed() metodunu yeni migration sınıfına ekleyebilirsiniz.
Seed() metodu kullanımı için örnek bir kod yapısı aşağıdaki gibidir:
public class ApplicationDbContext : DbContext{ public ApplicationDbContext(DbContextOptionsoptions) : base(options) { } public DbSet Products { get; set; } protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); // seed data builder.Entity ().HasData( new Product { Id = 1, Name = "Ürün 1", Price = 10 }, new Product { Id = 2, Name = "Ürün 2", Price = 20 }, new Product { Id = 3, Name = "Ürün 3", Price = 30 } ); }}
Yukarıdaki örnekte, DbContext sınıfı içinde OnModelCreating() metodu override edilerek seed data örneği oluşturulmuştur. Bu metot sayesinde veri tabanı oluşturulduğunda, örnekte tanımlanan ürün verileri direkt olarak kaydedilir.