COMPUTER ENGINEER

Örneklere git
Blog
Next.js / ASP.NET Core / SQL6 dk çalışma
31/ 41

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.

AnlaÖrneği inceleKendin uygula

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.

NERESİNDE KULLANIRSIN?

Şema değişiklikleri geri alınması en zor değişikliklerdir; plansız migration veri kaybettirir.

SIK YAPILAN HATA

Üretilen migration’ı okumadan üretim veritabanına uygulamak.

01 / UYGULAMA

Aynı konu. Üç farklı derinlik.

Temsili örnek
dotnet ef migrations add AddPostReadingTime \
  --project AtaberkSahin2.Infrastructure --startup-project AtaberkSahin2.Api
dotnet ef database update --project AtaberkSahin2.Infrastructure --startup-project AtaberkSahin2.Api

Migration 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.

02 / SIRA SENDE

Ö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
Açıklamalı çözüm
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.