0Pricing
C# Academy · Ders

Geçişler ve Şema Yönetimi

Veritabanı şemanızı güvenle geliştirmek için geçişler oluşturun, uygulayın ve geri alın.

Geçişler ve Şema Yönetimi, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.

EF Core Geçişleri Nedir?

Geçişler, veritabanı şemasındaki artımlı değişiklikleri açıklayan, kod tarafından oluşturulmuş dosyalardır. EF Core, DDL SQL'ini elle yazmak yerine bunu otomatik olarak oluşturup uygular ve kod ile veritabanını eşzamanlı tutar.

EF Core Araçlarını Yükleme

Geçiş komutlarını terminalden çalıştırmak için EF Core CLI aracı (dotnet-ef) küresel olarak veya yerel araç olarak yüklenmelidir.

# Install globally
dotnet tool install --global dotnet-ef

# Verify
dotnet ef --version

# Required NuGet packages in your project:
# Microsoft.EntityFrameworkCore.Design
# Microsoft.EntityFrameworkCore.SqlServer (or Sqlite, etc.)

İlk Geçişinizi Oluşturma

dotnet ef migrations add, geçerli modelinizi son anlık görüntüyle karşılaştırır ve Up() (uygulama) ile Down() (geri alma) yöntemlerini içeren bir geçiş dosyası oluşturur.

# Create initial migration
dotnet ef migrations add InitialCreate

# Output files created:
# Migrations/20240101_InitialCreate.cs       <- Up/Down
# Migrations/20240101_InitialCreate.Designer.cs
# Migrations/AppDbContextModelSnapshot.cs   <- current model

Bir Geçiş Dosyasının İçeriği

Her geçişte bir Up yöntemi (değişiklikleri uygular) ve bir Down yöntemi (değişiklikleri geri alır) bulunur. EF Core bunları model farklılıklarından otomatik olarak oluşturur.

public partial class InitialCreate : 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>(maxLength: 200, nullable: false),
                Price = table.Column<decimal>(type: "decimal(18,2)", nullable: false)
            },
            constraints: table => table.PrimaryKey("PK_Products", x => x.Id));
    }

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

Geçişleri Uygulama

dotnet ef database update, bekleyen tüm geçişleri uygular. EF Core, hangi geçişlerin çalıştırıldığını __EFMigrationsHistory tablosunda izler.

# Apply all pending migrations
dotnet ef database update

# Apply up to a specific migration
dotnet ef database update AddProductIndex

# Roll back to a previous migration
dotnet ef database update InitialCreate

Başlangıçta Program Aracılığıyla Geçiş

Üretim ortamında, veritabanının manuel CLI adımlarına gerek kalmadan her zaman güncel olması için geçişleri başlangıçta program aracılığıyla uygulayabilirsiniz.

var app = builder.Build();

// Apply pending migrations at startup
using (var scope = app.Services.CreateScope())
{
    var db = scope.ServiceProvider.GetRequiredService<AppDbContext>();
    await db.Database.MigrateAsync();
}

app.Run();

Yeni Bir Geçişte Sütun Ekleme

Varlığınıza bir özellik ekleyin, ardından yeni bir geçiş oluşturun. EF Core değişikliği algılar ve bir AddColumn işlemi oluşturur.

// 1. Add property to entity
public class Product
{
    public int Id { get; set; }
    public string Name { get; set; } = "";
    public decimal Price { get; set; }
    public string? Description { get; set; } // NEW
}

// 2. Generate migration
// dotnet ef migrations add AddProductDescription

// Generated Up():
migrationBuilder.AddColumn<string>(
    name: "Description",
    table: "Products",
    nullable: true);

Geçişlerde Veri Tohumlama

Referans verilerini eklemek için OnModelCreating içinde HasData kullanın. EF Core bunları geçişin Up bölümüne INSERT ifadeleri olarak ekler.

modelBuilder.Entity<Category>().HasData(
    new Category { Id = 1, Name = "Electronics" },
    new Category { Id = 2, Name = "Books" },
    new Category { Id = 3, Name = "Clothing" }
);

// Then regenerate the migration:
// dotnet ef migrations add SeedCategories

Geçişlerde Özel SQL

EF Core'un otomatik olarak oluşturamadığı DDL işlemlerine (tetikleyiciler, görünümler ve saklı yordamlar) ihtiyaç duyduğunuzda migrationBuilder.Sql() kullanın.

protected override void Up(MigrationBuilder migrationBuilder)
{
    migrationBuilder.Sql(@"
        CREATE VIEW vw_ActiveProducts AS
        SELECT Id, Name, Price
        FROM Products
        WHERE IsActive = 1
    ");
}

protected override void Down(MigrationBuilder migrationBuilder)
{
    migrationBuilder.Sql("DROP VIEW vw_ActiveProducts");
}

Bir Geçişi Kaldırma

Bir geçişi henüz uygulamadıysanız dotnet ef migrations remove ile silebilirsiniz. Bu şekilde yalnızca son geçiş kaldırılabilir.

# Remove the last unapplied migration
dotnet ef migrations remove

# List all migrations and their status
dotnet ef migrations list

# Script all migrations to SQL (for DBA review)
dotnet ef migrations script --output deploy.sql

Gerçek Hayattan: CI/CD Geçiş Stratejisi

Bir CI/CD işlem hattında geçiş betiği oluşturun ve üretime uygulamadan önce bir DBA'nın incelemesini sağlayın — kritik üretim sistemlerinde MigrateAsync() yöntemini asla düşünmeden çalıştırmayın.

# Generate idempotent script for all pending migrations
dotnet ef migrations script --idempotent --output migrations.sql

# Review migrations.sql, then apply via sqlcmd / psql:
# sqlcmd -S server -d db -i migrations.sql

Hızlı Kontrol

Bir veritabanına hangi geçişlerin zaten uygulandığını hangi EF Core tablosu izler?

Özet: Geçişler ve Şema Yönetimi

Önemli noktalar:

  • dotnet ef migrations add <Name>, artımlı şema değişikliklerini içeren dosyalar oluşturur
  • Her geçişte Up() (uygulama) ve Down() (geri alma) yöntemleri bulunur
  • dotnet ef database update, bekleyen geçişleri uygular
  • Otomatik dağıtımlar için uygulama başlangıcında MigrateAsync() kullanın
  • Üretim işlem hatlarında DBA incelemesi için tekrar çalıştırıldığında aynı sonucu veren betikler oluşturun

Sıkça Sorulan Sorular

“Geçişler ve Şema Yönetimi” dersi ücretsiz mi?

Evet — “Geçişler ve Şema Yönetimi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.

“Geçişler ve Şema Yönetimi” dersinde ne öğreneceğim?

Veritabanı şemanızı güvenle geliştirmek için geçişler oluşturun, uygulayın ve geri alın. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C# Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Geçişler ve Şema Yönetimi” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. DbContext ve DbSet Temelleri
  2. Geçişler ve Şema Yönetimi
  3. EF Core ile CRUD İşlemleri
  4. İlişkiler: Bire Çok ve Çoka Çok
← C# Academy Sayfasına Dön