- Veritabanıyla ilgili yapmış olduğumuz modellemeyi veritabanı sunucusunun anlayabileceği hale getirmemizi sağlayan bir modele/class modeline Migration denir.
- Migration'ların veritabanı sunucusunda o modele karşılık bir veritabanının oluşturulma süreci yani migrate etme/göç ettirme buradaki modeli veritabanı sunucusuna gönderilmesini ifade etmektedir.
- Migration oluşturuyorum dediğimde projede tasarlamış olduğum kod mantığının veritabanı sunucusuna göç ettirilebilecek modelini oluşturuyorum anlamına gelecek Migrate ediyorum dediğimde de işte bu migration'ı veritabanı sunucusuna gönderip orada fiziksel olarak gerekli değişiklikleri yaptırıyorum.
- Migration oluşturmak için temelde EF Core aktörleri olan DbContext ve Entity class'larını oluşturmak gerekir. Bunları oluşturduktan sonra migration Package Manager Console ve Dotnet CLI olmak üzere iki türlü talimatlar verilebilir.
- Her iki yöntemi de kullanabilmek için Microsoft.EntityFrameworkCore.Tools kütüphanesini uygulamaya yüklemeniz gerekmektedir.
- add-migration [Migration Name]
- dotnet ef migrations add [Migration Name]
- Up : O ana kadar yapılmış çalışmalarda veritabanı sunucusuna gönderilecek olanlar
- Down : Bir gün bu migration geri alınırsa yapmış olduğu neyse onu geri alanlar
- add-migration [Migration Name] -OutputDir [Path]
- dotnet ef migrations add [Migration Name]--output-dir [Path]
- remove-migration
- dotnet ef migrations remove
- get-migration
- dotnet ef migrations list
- update-database
- dotnet ef database update
- update-database [Migration Name]
- dotnet ef database update [Migration Name]
- Migration'ları tool aracılığıyla migrate edebildiğim,z gibi kod üzerinden de uygulamanın ayakta olduğu süreçte(runtime'da) veritabanını migrate edebiliyoruz.
AppDbContext context = new();
await context.Database.MigrateAsync();
- Veritabanı sınıfları üzerinde yapılan tüm değişiklikleri migration eşliğinde gönderiniz. Böylece her bir değişiklikleri migration'lar ile kayıt altına almış olursunuz.(bu da size veritabanı gelişim sürecini verir) ve ihtiyaca binaen istediğiniz noktaya geri dönüş sağlayabilirsiniz.
- Migration'lara mümkün mertebe dokunmamak lazım. Lakin ileride ihtiyaç doğrultusunda ham sql cümlecikleri ekleyeceğimiz ve hatta Stored Procedure gibi yapıları oluşturacağımız noktalar olacaktır.
- Her migration oluşturduğunuzda Snapshot klasöründe bir ekran görüntüsü alınır bu ekran görüntüsü sizin Migration yaptığınız tablolardaki Kolonlarını bulundurur. Bu yüzden Migration'ı eğer sileceksek Remove-Migration komutunu kullanmalı ve Snapshot dosyasından da silinmesini sağlamalıyız.