0Pricing
C# Academy · Pelajaran

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 model

Isi 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 InitialCreate

Migrasi 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 SeedCategories

SQL 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.sql

Dunia 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.sql

Pemeriksaan 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) dan Down() (mengembalikan)
  • dotnet ef database update menerapkan 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

  1. Dasar-Dasar DbContext & DbSet
  2. Migrasi & Pengelolaan Skema
  3. Operasi CRUD dengan EF Core
  4. Relasi: Satu-ke-Banyak & Banyak-ke-Banyak
← Kembali ke C# Academy