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 modelBir 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 InitialCreateBaş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 SeedCategoriesGeç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.sqlGerç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.sqlHı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) veDown()(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
- DbContext ve DbSet Temelleri
- Geçişler ve Şema Yönetimi
- EF Core ile CRUD İşlemleri
- İlişkiler: Bire Çok ve Çoka Çok