Gambaran Umum Migrasi

Dalam proyek dunia nyata, model data berubah saat fitur diimplementasikan: entitas atau properti baru ditambahkan dan dihapus, dan skema database perlu diubah agar tetap sinkron dengan aplikasi. Fitur migrasi di 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:

  • Saat 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, dan 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, memungkinkannya mengetahui migrasi mana yang telah diterapkan dan mana yang belum.

Sisa halaman ini adalah panduan pemula langkah demi langkah untuk menggunakan migrasi. Lihat halaman lain di bagian ini untuk informasi yang lebih mendalam.

Memulai Langkah Pertama

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

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

Selama pengembangan, Anda mungkin telah menggunakan API Buat dan Lepas untuk melakukan iterasi dengan cepat, mengubah model Anda sesuai kebutuhan; tetapi sekarang aplikasi Anda akan diproduksi, Anda memerlukan cara untuk mengembangkan skema dengan aman tanpa menghilangkan seluruh database.

Pasang alat

Pertama, Anda harus menginstal alat baris perintah EF Core:

  • Kami umumnya merekomendasikan penggunaan alat .NET CLI, yang berfungsi di semua platform.
  • Jika Anda lebih nyaman bekerja di dalam Visual Studio atau memiliki pengalaman dengan migrasi EF6, Anda juga dapat menggunakan alat Package Manager Console.

Mulai migrasi pertama Anda

Anda sekarang siap untuk memulai migrasi pertama Anda! Instruksikan EF Core untuk membuat migrasi bernama InitialCreate:

dotnet ef migrations add InitialCreate

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

Membuat database dan skema Anda

Pada titik ini Anda dapat meminta EF membuat database dan membuat skema Anda dari migrasi. Ini dapat dilakukan melalui hal-hal berikut:

dotnet ef database update

Itu saja yang ada untuk itu - aplikasi Anda siap untuk dijalankan pada database baru Anda, dan Anda tidak perlu menulis satu baris SQL. Perhatikan bahwa cara menerapkan migrasi ini sangat ideal untuk pengembangan lokal, tetapi kurang cocok untuk lingkungan produksi - lihat halaman Menerapkan Migrasi untuk informasi selengkapnya.

Mengembangkan model Anda

Beberapa hari telah berlalu, dan Anda diminta untuk menambahkan tanda waktu pembuatan ke blog Anda. Anda telah melakukan perubahan yang diperlukan pada aplikasi Anda, dan model Anda sekarang 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 sekarang tidak sinkron - kita harus menambahkan kolom baru ke skema database Anda. Mari kita buat migrasi baru untuk ini:

dotnet ef migrations add AddBlogCreatedTimestamp

Perhatikan bahwa kami memberikan nama deskriptif pada migrasi, untuk mempermudah memahami riwayat proyek nanti.

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

Anda sekarang dapat menerapkan migrasi Anda seperti sebelumnya:

dotnet ef database update

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

Mengecualikan bagian model Anda

Terkadang Anda mungkin ingin merujuk tipe dari DbContext lain. Ini dapat menyebabkan konflik migrasi. Untuk mencegah hal ini, kecualikan jenis dari migrasi salah satu DbContext.

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

Langkah berikutnya

Di atas hanya pengantar singkat untuk migrasi. Silakan lihat halaman dokumentasi lainnya untuk mempelajari selengkapnya tentang mengelola migrasi, menerapkannya, dan aspek lainnya. Referensi alat .NET CLI juga berisi informasi yang berguna tentang berbagai perintah

Sumber daya tambahan