Veri katmanı ve SQL
Migration: şemayı kodla yönetmek
Veritabanı şemasını sürümlemek, gözden geçirmek ve canlıya güvenle taşımak.
Kavramı anlayalım
EF Core migration’ları, model sınıflarındaki değişikliklerden veritabanı şeması değişikliği üretir. Her migration bir C# dosyasıdır: Up yeni şemaya geçişi, Down geri dönüşü tanımlar. Migration’lar kaynak kodla birlikte depoda tutulur; böylece şema da kod gibi sürümlenir, incelenir ve her ortama aynı sırayla uygulanır.
Üretilen migration her zaman okunmalıdır. Bir kolonu yeniden adlandırmak, EF Core tarafından ‘kolonu sil, yenisini ekle’ olarak algılanabilir ve veri kaybına yol açar. Büyük tablolarda kolon eklemek veya indeks oluşturmak kilit tutabilir. Üretimde migration uygulamadan önce veritabanı yedeklenir ve SQL betiği (dotnet ef migrations script) gözden geçirilir.
Canlı sistemde güvenli değişiklik genellikle aşamalıdır: önce yeni kolonu boş değer kabul edecek şekilde ekle, uygulamayı her iki kolonu da yazacak biçimde yayınla, veriyi taşı, en son eski kolonu kaldır. Bu ‘genişlet ve daralt’ yaklaşımı, eski ve yeni uygulama sürümlerinin kısa süre birlikte çalıştığı yayınlarda kesintiyi önler.
Şema değişiklikleri geri alınması en zor değişikliklerdir; plansız migration veri kaybettirir.
Üretilen migration’ı okumadan üretim veritabanına uygulamak.
Aynı konu. Üç farklı derinlik.
dotnet ef migrations add AddPostReadingTime \
--project AtaberkSahin2.Infrastructure --startup-project AtaberkSahin2.Api
dotnet ef database update --project AtaberkSahin2.Infrastructure --startup-project AtaberkSahin2.ApiMigration oluşturma ve uygulama; bu projede DbContext Infrastructure’da, başlangıç projesi Api’dir.
Bu sayfa gerçek bir sunucuya veya veritabanına bağlanmaz. Kod örnekleri .NET 8, Next.js ve SQL Server için temsilîdir; süreler simülasyondaki örnek değerlerdir, ölçüm değildir. Örnekleri yalnız kendi geliştirme ortamında dene; gerçek bağlantı dizesi, token veya parola paylaşma.
Önce kendin dene.
Users tablosundaki FullName kolonunu FirstName ve LastName olarak ikiye bölmek istiyorsun. Kesintisiz bir yayın için adımları sırala.
Çözümü ve açıklamasını göster
1) FirstName ve LastName’i nullable ekle (migration).
2) Uygulamayı her üç kolonu da yazacak şekilde yayınla.
3) Mevcut veriyi FullName’den böl ve doldur (veri betiği).
4) Uygulamayı yalnız yeni kolonları okuyup yazacak şekilde yayınla.
5) FullName’i kaldır (son migration).Genişlet ve daralt: her adımda hem eski hem yeni uygulama sürümü çalışmaya devam edebilir.