Modern yazılım geliştirme süreçlerinde veritabanı yönetimi, uygulamanın sürdürülebilirliği ve ölçeklenebilirliği açısından kritik bir rol oynar. Özellikle .NET ekosisteminde çalışan geliştiriciler için Entity Framework Core (EF Core), veritabanı işlemlerini kolaylaştıran güçlü bir ORM (Object Relational Mapper) aracıdır. Bu yapının en önemli özelliklerinden biri ise Migration sistemidir.

EF Core Migration, uygulama içerisindeki model sınıflarının veritabanı şemasına otomatik olarak yansıtılmasını sağlayan bir mekanizmadır. Geliştirici, entity modellerinde yaptığı değişiklikleri migration komutları ile veritabanına uygulayabilir. Böylece manuel SQL yazmadan veritabanı şeması güncellenebilir.

Bu rehberde EF Core migration işlemleri, migration oluşturma, migration silme, veritabanını güncelleme, rollback işlemleri ve migration hatalarının çözümü gibi konular detaylı şekilde ele alınacaktır. Eğer .NET projelerinde veritabanı yönetimini doğru şekilde yapmak istiyorsanız, bu makale size kapsamlı bir yol haritası sunacaktır.

EF Core Migration Nedir?

EF Core migration, uygulama içerisindeki entity modellerinde yapılan değişikliklerin veritabanı şemasına otomatik olarak uygulanmasını sağlayan bir versiyonlama sistemidir.

Kısaca ifade etmek gerekirse migration sistemi, model değişikliklerini takip eder ve bu değişiklikleri SQL komutlarına dönüştürerek veritabanına uygular.

Örneğin aşağıdaki değişiklikler migration ile yönetilebilir:

  • Yeni tablo oluşturma
  • Mevcut tabloya yeni kolon ekleme
  • Kolon silme
  • Veri tipi değiştirme
  • Foreign key ilişkileri oluşturma
  • Index ekleme

Bu sayede geliştiriciler veritabanını manuel olarak düzenlemek yerine migration dosyaları üzerinden tüm değişiklikleri kontrol edebilir.

EF Core Migration Nasıl Çalışır?

EF Core migration sistemi, uygulamadaki model sınıfları ile veritabanı şemasını karşılaştırarak değişiklikleri tespit eder.

Bu süreç aşağıdaki adımlar ile gerçekleşir:

  1. Entity modellerinde değişiklik yapılır
  2. Migration oluşturulur
  3. Migration dosyası SQL komutları üretir
  4. Veritabanı update edilir
  5. EFMigrationsHistory tablosu güncellenir

EF Core migration sistemi ayrıca yapılan değişiklikleri __EFMigrationsHistory tablosunda saklar. Bu tablo hangi migration'ların uygulandığını takip eder.

Migration Aşaması Açıklama
Model Değişikliği Entity sınıflarında yapılan değişiklikler
Migration Oluşturma EF Core değişiklikleri algılar
Migration Dosyası SQL komutları oluşturulur
Database Update Veritabanı güncellenir

EF Core Migration İçin Gerekli Kütüphaneler

EF Core migration işlemlerini gerçekleştirebilmek için projeye bazı NuGet paketlerinin eklenmesi gerekir.

  • Microsoft.EntityFrameworkCore
  • Microsoft.EntityFrameworkCore.Tools
  • Microsoft.EntityFrameworkCore.Design

Eğer farklı bir veritabanı kullanıyorsanız buna uygun provider paketini de eklemeniz gerekir.

Veritabanı Sağlayıcı Örnekleri

Veritabanı NuGet Paketi
SQL Server Microsoft.EntityFrameworkCore.SqlServer
PostgreSQL Npgsql.EntityFrameworkCore.PostgreSQL
MySQL Pomelo.EntityFrameworkCore.MySql
SQLite Microsoft.EntityFrameworkCore.Sqlite

Katmanlı Mimari Kullanımı

Eğer projede katmanlı mimari kullanılıyorsa kütüphanelerin doğru katmanlara eklenmesi önemlidir.

  • Design paketi → UI veya API katmanı
  • EF Core paketleri → DataAccess katmanı

EF Core Migration Oluşturma

Migration oluşturmak için iki farklı yöntem kullanılabilir:

  • Package Manager Console
  • CLI (Command Line Interface)

Package Manager Console ile Migration

add-migration InitialCreate

CLI ile Migration

dotnet ef migrations add InitialCreate

Bu komut çalıştırıldığında proje içerisinde Migrations klasörü oluşur ve migration dosyaları oluşturulur.

Migration dosyasında iki önemli metod bulunur:

  • Up() → Veritabanına uygulanacak değişiklikler
  • Down() → Geri alma işlemleri

EF Core Veritabanı Güncelleme

Migration oluşturulduktan sonra bu değişikliklerin veritabanına uygulanması gerekir. Bu işlem update-database komutu ile yapılır.

Package Manager Console

update-database

CLI Komutu

dotnet ef database update

Bu komut çalıştırıldığında aşağıdaki işlemler gerçekleşir:

  • Veritabanı oluşturulur
  • Tablolar oluşturulur
  • Migration geçmişi kaydedilir

Migration Silme İşlemi

Bazen oluşturulan migration dosyasını kaldırmak gerekebilir. Bunun için remove komutu kullanılabilir.

Package Manager Console

remove-migration

CLI Komutu

dotnet ef migrations remove

Bu komut sadece en son oluşturulan migration dosyasını kaldırır.

Migration Geri Alma (Rollback)

EF Core migration sistemi sayesinde veritabanını eski bir migration sürümüne döndürmek mümkündür.

Bunun için aşağıdaki komut kullanılır:

dotnet ef database update MigrationAdi

Örneğin:

dotnet ef database update InitialCreate

Bu işlem veritabanını belirtilen migration sürümüne geri döndürür.

EF Core Migration Hataları ve Çözümleri

Migration işlemleri sırasında bazı hatalarla karşılaşabilirsiniz. En yaygın hatalar aşağıdaki gibidir.

DbContext Bulunamadı Hatası

Bu hata genellikle proje içerisinde birden fazla DbContext bulunduğunda ortaya çıkar.

dotnet ef migrations add InitialCreate --context AppDbContext

Migration Zaten Var Hatası

Aynı isimde migration oluşturulmaya çalışıldığında bu hata oluşur.

Connection String Hatası

appsettings.json içerisinde connection string yanlış tanımlanmış olabilir.

EF Core Migration En İyi Pratikleri

Migration işlemlerini daha sağlıklı yönetebilmek için bazı best practice kurallarına dikkat edilmelidir.

  • Her değişiklik için ayrı migration oluşturun
  • Migration isimlerini anlamlı seçin
  • Production ortamında otomatik migration kullanmayın
  • Migration dosyalarını versiyon kontrolünde saklayın
  • Database backup alın

İyi Migration İsimlendirme Örnekleri

Migration İsmi Açıklama
AddUserTable Kullanıcı tablosu ekleme
AddOrderColumn Sipariş kolonu ekleme
UpdateProductPrice Ürün fiyat alanı güncelleme

Sık Sorulan Sorular

EF Core migration nedir?

EF Core migration, uygulamadaki entity modellerinde yapılan değişiklikleri otomatik olarak veritabanı şemasına uygulayan bir versiyonlama sistemidir. Bu sistem sayesinde veritabanı yapısı kod ile senkronize şekilde yönetilebilir.

Migration oluşturmadan database update yapılabilir mi?

Hayır. EF Core veritabanını güncellemek için önce migration oluşturulması gerekir. Migration dosyası veritabanına uygulanacak SQL komutlarını içerir.

Migration dosyaları silinirse ne olur?

Eğer migration dosyaları silinirse EF Core veritabanı geçmişini takip edemez. Bu nedenle migration dosyalarının versiyon kontrolünde saklanması önerilir.

EF Core migration production ortamında kullanılabilir mi?

Evet kullanılabilir ancak production ortamında migration işlemleri dikkatli yapılmalıdır. Yanlış migration veri kaybına neden olabilir.

EFMigrationsHistory tablosu nedir?

EF Core tarafından oluşturulan bu tablo, veritabanına uygulanmış migration kayıtlarını saklar. Böylece sistem hangi migration'ın uygulanıp uygulanmadığını takip edebilir.