Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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
- Referensi alat Entity Framework Core - .NET CLI : Menyertakan perintah untuk memperbarui, menghilangkan, menambahkan, menghapus, dan banyak lagi.
- Referensi alat Entity Framework Core - Package Manager Console di Visual Studio : Menyertakan perintah untuk memperbarui, menghapus, menambahkan, dan banyak lagi.
- Sesi Standup Komunitas Data .NET yang membahas fitur migrasi baru di EF Core 5.0.