Migrasi & Pengelolaan Skema
Buat, terapkan, dan batalkan migrasi untuk mengembangkan skema basis data dengan aman.
Migrasi & Pengelolaan Skema adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.
Apa Itu Migrasi EF Core?
Migrasi adalah berkas yang dibuat dari kode dan menjelaskan perubahan skema basis data secara bertahap. Alih-alih menulis SQL DDL secara manual, EF Core membuat dan menerapkannya secara otomatis agar kode dan basis data tetap sinkron.
Memasang Alat EF Core
Alat CLI EF Core (dotnet-ef) harus dipasang secara global (atau sebagai alat lokal) untuk menjalankan perintah migrasi dari terminal.
# 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.)Membuat Migrasi Pertama Anda
dotnet ef migrations add membandingkan model saat ini dengan rekam jepret terakhir, lalu menghasilkan berkas migrasi dengan metode Up() (menerapkan) dan Down() (mengembalikan).
# 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 modelIsi Berkas Migrasi
Setiap migrasi memiliki metode Up (menerapkan perubahan) dan metode Down (mengembalikannya). EF Core membuat metode tersebut secara otomatis berdasarkan perbedaan model.
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");
}
}Menerapkan Migrasi
dotnet ef database update menerapkan semua migrasi yang tertunda. EF Core melacak migrasi yang telah dijalankan dalam tabel __EFMigrationsHistory.
# 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 InitialCreateMigrasi Terprogram saat Aplikasi Dimulai
Dalam lingkungan produksi, Anda dapat menerapkan migrasi secara terprogram saat aplikasi dimulai agar basis data selalu mutakhir tanpa langkah CLI manual.
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();Menambahkan Kolom dalam Migrasi Baru
Tambahkan properti ke entitas Anda, lalu buat migrasi baru. EF Core mendeteksi perubahan tersebut dan menghasilkan operasi AddColumn.
// 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);Pengisian Data dalam Migrasi
Gunakan HasData dalam OnModelCreating untuk mengisi data referensi. EF Core menyertakannya dalam Up migrasi sebagai pernyataan INSERT.
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 SeedCategoriesSQL Kustom dalam Migrasi
Jika Anda memerlukan DDL yang tidak dapat dibuat EF Core secara otomatis (pemicu, tampilan, prosedur tersimpan), gunakan migrationBuilder.Sql().
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");
}Menghapus Migrasi
Jika migrasi belum diterapkan, Anda dapat menghapusnya dengan dotnet ef migrations remove. Hanya migrasi terakhir yang dapat dihapus dengan cara ini.
# 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.sqlDunia Nyata: Strategi Migrasi CI/CD
Dalam alur CI/CD, buat skrip migrasi dan biarkan DBA meninjaunya sebelum menerapkannya ke produksi — jangan pernah menjalankan MigrateAsync() secara membabi buta pada sistem produksi yang kritis.
# 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.sqlPemeriksaan Singkat
Tabel EF Core mana yang melacak migrasi yang sudah diterapkan ke basis data?
Ringkasan: Migrasi & Pengelolaan Skema
Poin penting:
dotnet ef migrations add <Name>menghasilkan berkas perubahan skema secara bertahap- Setiap migrasi memiliki metode
Up()(menerapkan) danDown()(mengembalikan) dotnet ef database updatemenerapkan migrasi yang tertunda- Gunakan
MigrateAsync()saat aplikasi dimulai untuk penerapan otomatis - Buat skrip SQL idempoten untuk ditinjau DBA dalam alur produksi
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Migrasi & Pengelolaan Skema” gratis?
Ya — teks lengkap “Migrasi & Pengelolaan Skema” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Migrasi & Pengelolaan Skema”?
Buat, terapkan, dan batalkan migrasi untuk mengembangkan skema basis data dengan aman. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C# Academy?
Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Migrasi & Pengelolaan Skema” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?
Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Dasar-Dasar DbContext & DbSet
- Migrasi & Pengelolaan Skema
- Operasi CRUD dengan EF Core
- Relasi: Satu-ke-Banyak & Banyak-ke-Banyak