Gambaran Umum Migrasi

Dalam proyek dunia nyata, model data berubah saat fitur diimplementasikan: entitas atau properti baru ditambahkan dan dihapus, serta skema database perlu diubah agar tetap sinkron dengan aplikasi. Migrasi EF Core menyediakan cara untuk memperbarui skema database secara bertahap, agar tetap sinkron dengan model data aplikasi sambil mempertahankan data yang ada dalam database.

Pada tingkat tinggi, migrasi berfungsi dengan cara berikut ini:

  • Ketika perubahan model data diperkenalkan, pengembang menggunakan alat EF Core untuk menambahkan migrasi terkait yang menjelaskan pembaruan yang diperlukan untuk menjaga skema database tetap sinkron. EF Core membandingkan model saat ini dengan rekam jepret model lama untuk menentukan perbedaan, serta menghasilkan file sumber migrasi; file dapat dilacak dalam kontrol sumber proyek Anda seperti file sumber lainnya.
  • Setelah migrasi baru dibuat, migrasi dapat diterapkan ke database dengan berbagai cara. EF Core mencatat semua migrasi yang diterapkan dalam tabel riwayat khusus, sehingga memungkinkannya mengetahui migrasi mana yang telah diterapkan dan yang belum.

Sisa halaman ini merupakan panduan pemula yang lengkap untuk menggunakan migrasi. Lihat halaman lain di bagian ini untuk memperoleh informasi yang lebih mendalam.

Memulai

Mari kita asumsikan Anda baru saja menyelesaikan aplikasi EF Core pertama Anda, yang berisi model sederhana berikut ini:

public class Blog
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Selama pengembangan, Anda mungkin telah menggunakan Buat dan Hilangkan API. Singkatnya, untuk mengubah model sesuai kebutuhan; namun kini aplikasi Anda masuk dalam proses produksi, maka Anda membutuhkan cara untuk mengembangkan skema secara aman tanpa menghapus keseluruhan database.

Pasang alat-alat

Pertama, Anda harus menginstal Alat baris perintah EF Core:

  • Kami merekomendasikan penggunaan Alat .NET Core CLI, yang bekerja di semua platform.
  • Jika Anda lebih suka bekerja di Visual Studio atau berpengalaman dalam migrasi EF6, Anda juga dapat menggunakan Alat Konsol Manajer Paket.

Membuat migrasi pertama Anda

Kini Anda siap untuk menambahkan migrasi pertama Anda! Instruksikan EF Core agar membuat migrasi bernama InitialCreate:

dotnet ef migrations add InitialCreate

EF Core akan membuat direktori bernama Migrasi dalam proyek Anda, dan menghasilkan sejumlah file. Direkomendasikan untuk memeriksa apa yang dihasilkan EF Core sebenarnya - dan mungkin mengubahnya - tetapi kita akan melewatinya untuk saat ini.

Membuat database dan skema

Pada titik ini, Anda dapat meminta EF membuat database dan membuat skema dari migrasi. Hal ini dapat dilakukan melalui cara berikut ini:

dotnet ef database update

Itu saja - aplikasi Anda siap untuk dijalankan pada database baru Anda, dan Anda tidak perlu menulis satu baris SQL. Perhatikan bahwa cara migrasi ini ideal untuk pengembangan lokal, namun kurang sesuai untuk lingkungan produksi - lihat halaman Menerapkan Migrasi untuk info selengkapnya.

Mengembangkan model Anda

Beberapa hari telah berlalu, dan Anda diminta untuk menambahkan tanda waktu pembuatan pada blog Anda. Anda telah melakukan perubahan yang diperlukan pada aplikasi Anda, dan model Anda kini terlihat seperti ini:

public class Blog
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime CreatedTimestamp { get; set; }
}

Model dan database produksi Anda kini tidak sinkron - kita harus menambahkan kolom baru ke skema database Anda. Mari membuat migrasi baru untuk hal ini:

dotnet ef migrations add AddBlogCreatedTimestamp

Perhatikan bahwa kami memberikan nama deskriptif kepada migrasi untuk mempermudah pemahaman riwayat proyek nantinya.

Karena ini bukan migrasi pertama proyek, EF Core sekarang membandingkan model yang diperbarui dengan rekam jepret model lama, sebelum kolom ditambahkan; rekam jepret model merupakan salah satu file yang dihasilkan oleh EF Core saat Anda menambahkan migrasi, dan diperiksa ke kontrol sumber. Berdasarkan perbandingan itu, EF Core mendeteksi bahwa kolom telah ditambahkan dan menambahkan migrasi yang sesuai.

Kini Anda dapat menerapkan migrasi seperti sebelumnya:

dotnet ef database update

Perhatikan bahwa kali ini, EF mendeteksi bahwa database telah ada. Selain itu, ketika migrasi pertama kami diterapkan di atas, fakta ini akan dicatat dalam tabel riwayat migrasi khusus di database Anda; ini memungkinkan EF untuk secara otomatis hanya menerapkan migrasi baru.

Mengecualikan bagian model tertentu milik Anda

Terkadang Anda mungkin ingin mereferensikan jenis dari DbContext yang lain. Hal ini dapat menyebabkan konflik migrasi. Untuk mencegah hal ini, kecualikan jenis tertentu dari migrasi salah satu DbContexts.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<IdentityUser>()
        .ToTable("AspNetUsers", t => t.ExcludeFromMigrations());
}

Langkah berikutnya

Hal yang dijelaskan di atas hanya pengantar singkat untuk migrasi. Harap lihat dokumentasi lainnya untuk mempelajari selengkapnya mengenai mengelola migrasi, menerapkannya, dan aspek lainnya. Referensi alat .NET Core CLI juga berisi informasi berguna mengenai perintah yang berbeda

Sumber Daya Tambahan: