Skip to content

Migrations

Genel Bakış

Migrations, Entity Framework Core'da veritabanı şemasını yönetmek için kullanılan bir sistemdir. Veritabanı değişikliklerini kod tabanlı bir yaklaşımla yönetmeyi ve versiyonlamayı sağlar.

Mülakat Soruları ve Cevapları

1. Migration nedir ve neden kullanılır?

Cevap: Migration, veritabanı şemasındaki değişiklikleri kod tabanlı olarak yönetmeyi sağlayan bir sistemdir. Kullanım nedenleri: - Veritabanı değişikliklerinin versiyonlanması - Takım çalışmasında değişikliklerin senkronizasyonu - Geri alma (rollback) imkanı - Otomatik şema güncelleme

Örnek Kod:

// Migration oluşturma
dotnet ef migrations add InitialCreate

// Migration uygulama
dotnet ef database update

// Migration geri alma
dotnet ef database update PreviousMigration

2. Migration nasıl oluşturulur ve uygulanır?

Cevap: Migration oluşturma ve uygulama adımları: 1. Entity sınıflarında değişiklik yapma 2. Migration oluşturma 3. Migration'ı inceleme 4. Veritabanına uygulama

Örnek Kod:

// Entity sınıfı
public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

// Migration oluşturma komutu
dotnet ef migrations add AddProductTable

// Migration dosyası
public partial class AddProductTable : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.CreateTable(
            name: "Products",
            columns: table => new
            {
                Id = table.Column<int>(nullable: false)
                    .Annotation("SqlServer:Identity", "1, 1"),
                Name = table.Column<string>(nullable: false),
                Price = table.Column<decimal>(nullable: false)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_Products", x => x.Id);
            });
    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.DropTable(name: "Products");
    }
}

3. Migration stratejileri nelerdir?

Cevap: Temel Migration stratejileri: - Code First: Entity sınıflarından veritabanı oluşturma - Database First: Veritabanından entity sınıfları oluşturma - Hybrid: Her iki yaklaşımın kombinasyonu

Örnek Kod:

// Code First yaklaşımı
public class ApplicationDbContext : DbContext
{
    public DbSet<Product> Products { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Product>()
            .HasKey(p => p.Id);

        modelBuilder.Entity<Product>()
            .Property(p => p.Name)
            .IsRequired()
            .HasMaxLength(100);
    }
}

// Database First yaklaşımı
dotnet ef dbcontext scaffold "Server=.;Database=MyDb;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models

4. Migration'lar nasıl yönetilir?

Cevap: Migration yönetimi için: - Migration'ları version control'de tutun - Migration'ları isimlendirin - Migration'ları test edin - Rollback stratejisi belirleyin

Örnek Kod:

// Migration listesi görüntüleme
dotnet ef migrations list

// Migration silme
dotnet ef migrations remove

// Belirli bir migration'a geri dönme
dotnet ef database update 20240101000000_InitialCreate

// Tüm migration'ları geri alma
dotnet ef database update 0

5. Migration'ları production ortamında nasıl yönetirsiniz?

Cevap: Production ortamında migration yönetimi için: - Migration'ları script olarak oluşturun - Script'leri inceleyin - Yedekleme yapın - Rollback planı hazırlayın

Örnek Kod:

// Migration script oluşturma
dotnet ef migrations script -o migration.sql

// Belirli migration'lar arası script oluşturma
dotnet ef migrations script FromMigration ToMigration -o migration.sql

// Idempotent script oluşturma
dotnet ef migrations script --idempotent -o migration.sql

Best Practices

  1. Migration Yönetimi
  2. Migration'ları düzenli oluşturun
  3. Migration'ları isimlendirin
  4. Migration'ları test edin
  5. Rollback stratejisi belirleyin

  6. Veritabanı Değişiklikleri

  7. Büyük değişiklikleri parçalayın
  8. Veri kaybına dikkat edin
  9. Index'leri optimize edin
  10. Performans etkisini değerlendirin

  11. Takım Çalışması

  12. Migration'ları senkronize edin
  13. Çakışmaları yönetin
  14. Code review yapın
  15. Deployment stratejisi belirleyin

Kaynaklar