Bagikan melalui


Memindahkan dari EF6 ke EF Core

Singkatnya, Entity Framework Core, atau EF Core, adalah regenerasi total Entity Framework untuk arsitektur aplikasi modern. Karena perubahan mendasar, tidak ada jalur peningkatan langsung. Tujuan dari dokumentasi ini adalah memberikan panduan end-to-end dalam memindahkan aplikasi EF6 Anda ke EF Core.

Penting

Sebelum memulai proses pemindahan, penting untuk memvalidasi apakah EF Core memenuhi persyaratan akses data untuk aplikasi Anda. Anda dapat menemukan semua yang Anda butuhkan dalam dokumentasi EF Core.

Penting

Ada masalah umum (microsoft/dotnet-apiport #993) dengan penganalisis portabilitas yang salah melaporkan EF Core sebagai tidak kompatibel dengan .NET 5 dan .NET 6. Peringatan tersebut dapat diabaikan dengan aman karena EF Core 100% kompatibel dengan kerangka kerja target .NET 5 dan .NET 6.

Alasan untuk meningkatkan

Semua pengembangan Entity Framework baru terjadi di EF Core. Tidak ada rencana untuk melakukan backport fitur baru apa pun ke EF6. EF Core berjalan pada runtime bahasa umum .NET terbaru dan memanfaatkan sepenuhnya runtime bahasa umum, khusus platform (seperti ASP.NET Core atau WPF) dan fitur khusus bahasa. Berikut adalah beberapa keuntungan yang Anda dapatkan dari peningkatan:

  • Manfaatkan peningkatan performa terus-menerus di EF Core. Misalnya, satu pelanggan yang bermigrasi dari EF6 ke EF Core 6 melihat 40x pengurangan penggunaan kueri berat karena fitur pemisahan kueri. Banyak pelanggan melaporkan peningkatan performa yang sangat besar hanya dengan berpindah ke EF Core terbaru.
  • Gunakan fitur baru di EF Core. Tidak akan ada fitur baru yang ditambahkan ke EF6. Semua fungsionalitas baru, misalnya penyedia Azure Cosmos DB dan DbContextFactory, hanya akan ditambahkan ke EF Core. Untuk perbandingan lengkap EF6 dengan EF Core, termasuk beberapa fitur yang eksklusif untuk EF Core, lihat: Membandingkan EF Core & EF6.
  • Modernisasi tumpukan aplikasi Anda dengan menggunakan injeksi dependensi dan integrasikan akses data Anda dengan mulus dengan teknologi seperti gRPC dan GraphQL.

Catatan tentang migrasi

Dokumentasi ini menggunakan istilah port (memindahkan) dan peningkatan untuk menghindari kebingungan dengan istilah migrasi sebagai fitur EF Core. Migrasi di EF Core tidak kompatibel dengan migrasi Kode Terlebih Dahulu EF6 karena peningkatan yang signifikan terhadap cara migrasi ditangani. Tidak ada pendekatan yang direkomendasikan untuk memindahkan riwayat migrasi Anda, jadi rencanakan untuk memulai "dari awal" di EF Core. Anda dapat menyimpan basis kode dan data dari migrasi EF6 Anda. Terapkan migrasi akhir Anda di EF6, lalu buat migrasi awal di EF Core. Anda akan dapat melacak riwayat di EF Core ke depannya.

Langkah-langkah peningkatan

Jalur peningkatan telah dibagi menjadi beberapa dokumen yang diatur oleh fase peningkatan Anda dan jenis aplikasi.

Menentukan "rasa" EF Core Anda

Ada beberapa pendekatan untuk cara kerja EF Core dengan model domain dan implementasi database Anda. Secara umum, sebagian besar aplikasi akan mengikuti salah satu pola ini dan bagaimana pendekatan Anda terhadap port akan tergantung pada "rasa" aplikasi.

Kode sebagai sumber tepercaya adalah pendekatan ketika semuanya dimodelkan melalui kode dan kelas, baik melalui atribut data, konfigurasi lancar, atau kombinasi keduanya. Database awalnya dihasilkan berdasarkan model yang ditentukan dalam EF Core dan pembaruan lebih lanjut biasanya ditangani melalui migrasi. Ini sering disebut sebagai "kode terlebih dahulu," tetapi namanya tidak sepenuhnya akurat karena salah satu pendekatannya adalah memulai dengan database yang ada, menghasilkan entitas Anda, kemudian mempertahankan dengan kode yang berkembang.

Pendekatan Database sebagai sumber tepercaya melibatkan rekayasa terbalik atau perancah untuk kode Anda dari database. Ketika perubahan skema terjadi, kode diregenerasi atau diperbarui untuk mencerminkan perubahan. Ini sering disebut "database terlebih dahulu."

Akhirnya, pendekatan pemetaan Hibrid yang lebih canggih mengikuti filosofi bahwa kode dan database dikelola secara terpisah, dan EF Core digunakan untuk memetakan di antara keduanya. Pendekatan ini biasanya mengalihkan migrasi.

Tabel berikut ini meringkas beberapa perbedaan tingkat tinggi:

Pendekatan Peran pengembang Peran DBA Migrasi Perancah Reposition
Kode terlebih dahulu Mendesain entitas dan memverifikasi/menyesuaikan migrasi yang dihasilkan Memverifikasi definisi dan perubahan skema Per penerapan T/A Melacak entitas, DbContext, dan migrasi
Database terlebih dahulu Rekayasa terbalik setelah perubahan dan memverifikasi entitas yang dihasilkan Memberi tahu pengembang ketika database berubah menjadi perancah ulang T/A Per perubahan skema Melacak ekstensi/kelas parsial yang memperluas entitas yang dihasilkan
Hybrid Memperbarui konfigurasi lancar untuk memetakan setiap kali entitas atau database berubah Memberi tahu pengembang ketika database telah berubah sehingga mereka dapat memperbarui entitas dan konfigurasi model T/A T/A Melacak entitas dan DbContext

Pendekatan hibrid adalah pendekatan yang lebih canggih dengan overhead tambahan dibandingkan dengan pendekatan kode dan database tradisional.

Memahami dampak berpindah EDMX

EF6 mendukung format definisi model khusus bernama Entity Data Model XML (EDMX). File EDMX berisi beberapa definisi, termasuk definisi skema konseptual (CSDL), spesifikasi pemetaan (MSL), dan definisi skema penyimpanan (SSDL). EF Core melacak skema database, pemetaan, dan domain melalui grafik model internal dan tidak mendukung format EDMX. Banyak postingan blog dan artikel yang salah keliru menyatakan bahwa ini berarti EF Core hanya mendukung "kode terlebih dahulu." EF Core mendukung ketiga model aplikasi yang dijelaskan di bagian sebelumnya. Anda dapat membuat ulang model di EF Core dengan merekayasa balik database. Jika Anda menggunakan EDMX untuk representasi visual model entitas, sebaiknya gunakan EF Core Power Tools sumber terbuka yang menyediakan kemampuan serupa untuk EF Core.

Untuk informasi selengkapnya tentang dampak kurangnya dukungan untuk file EDMX, baca panduan memindahkan EDMX.

Melakukan langkah-langkah peningkatan

Ini bukan persyaratan untuk memindahkan seluruh aplikasi. EF6 dan EF Core dapat berjalan di aplikasi yang sama (lihat: menggunakan EF Core dan EF6 di aplikasi yang sama). Untuk meminimalkan risiko, Anda dapat mempertimbangkan:

  1. Berpindah ke EF6 di .NET Core jika belum melakukannya.
  2. Memigrasikan sebagian kecil aplikasi Anda ke EF Core dan menjalankannya berdampingan dengan EF6.
  3. Membawa basis kode lainnya ke EF Core dan menghentikan kode EF6.

Untuk port itu sendiri, pada tingkat tinggi, Anda akan:

  1. Meninjau perubahan perilaku antara EF6 dan EF Core.
  2. Melakukan migrasi akhir, jika ada, di EF6.
  3. Membuat proyek EF Core.
  4. Menyalin kode ke proyek baru, menjalankan rekayasa terbalik, atau kombinasi keduanya.
  5. Ganti nama referensi dan entitas dan perilaku pembaruan:
    • System.Data.Entity ke Microsoft.EntityFrameworkCore
    • Mengubah konstruktor DbContext untuk menggunakan opsi dan/atau mengambil alih OnConfiguring
    • DbModelBuilder ke ModelBuilder
    • Mengganti nama DbEntityEntry<T> menjadi EntityEntry<T>
    • Berpindah dari Database.Log ke Microsoft.Extensions.Logging (tingkat lanjut) atau API DbContextOptionsBuilder.LogTo (sederhana)
    • Menerapkan perubahan untuk WithRequired dan WithOptional (lihat di sini)
    • Memperbarui kode validasi. Tidak ada validasi data yang dibangun ke dalam EF Core, tetapi Anda dapat melakukannya sendiri.
    • Ikuti langkah-langkah yang diperlukan untuk berpindah dari EDMX.
  6. Lakukan langkah-langkah khusus berdasarkan pendekatan EF Core Anda:

Ada banyak pertimbangan yang berkaitan dengan semua pendekatan, sehingga Anda juga perlu meninjau cara untuk mengatasi dan menangani perbedaan mendetail antara EF6 dan EF Core.