Bagikan melalui


Port dari EF6 ke EF Core - Database sebagai Sumber Kebenaran

Jika Anda menggunakan database sebagai sumber kebenaran, peningkatan sebagian besar akan melibatkan mengatasi perubahan apa pun pada bentuk entitas yang dihasilkan. Langkah-langkah untuk bermigrasi meliputi:

  1. Pilih titik waktu untuk memodelkan database.
  2. Pastikan proyek EF6 Anda sudah diperbarui dan disinkronkan dengan database.
  3. Buat proyek EF Core.
  4. Gunakan alat perancah untuk merekayasa balik database Anda ke kode.
  5. Validasi bahwa kelas yang dihasilkan EF Core kompatibel dengan kode Anda.
  6. Untuk pengecualian, ubah kelas yang dihasilkan dan perbarui konfigurasi model atau sesuaikan kode Anda dengan model.

Perhatikan bahwa meskipun EF Core saat ini merancang semua yang diperlukan untuk berhasil menghasilkan salinan database, sebagian besar kode tidak diperlukan untuk pendekatan database-first. Perbaikan untuk ini dilacak dalam Masalah #10890. Hal-hal yang dapat Anda abaikan dengan aman sesuai kebutuhan meliputi: urutan, nama batasan, indeks non-unik, dan filter indeks.

Menangani perubahan skema

Ketika database Anda adalah sumber kebenaran, EF Core menarik informasi skema dari database daripada mendorongnya melalui migrasi. Alur kerja yang khas adalah menjalankan kembali langkah rekayasa terbalik setiap kali skema database berubah. Rangkaian pengujian komprehensif sangat berharga untuk pendekatan ini karena Anda dapat mengotomatiskan proses perancah dan memverifikasi perubahan dengan menjalankan pengujian Anda.

Tips untuk menangani perbedaan model

Untuk berbagai alasan, Anda mungkin ingin model domain C# Anda dibentuk secara berbeda dari yang dihasilkan dalam rekayasa terbalik. Dalam banyak kasus, ini berarti memperbarui kode yang dihasilkan secara otomatis secara manual setelah setiap perubahan skema. Salah satu cara untuk mencegah upaya ekstra ketika kode diregenerasi adalah dengan menggunakan kelas parsial untuk DbContext dan entitas terkait Anda. Kemudian Anda dapat menyimpan kode yang terkait dengan logika bisnis dan properti yang tidak dilacak dalam database dalam sekumpulan file kelas terpisah yang tidak akan ditimpa.

Jika model Anda secara signifikan berbeda dari yang dihasilkan, tetapi tidak sering berubah, salah satu opsi yang perlu dipertimbangkan adalah penggunaan pola repositori sebagai adaptor. Repositori dapat menggunakan kelas yang dihasilkan EF Core dan menerbitkan kelas kustom yang Anda gunakan. Ini dapat mengurangi dampak perubahan dengan mengisolasinya ke kode repositori, daripada harus melakukan refaktor di seluruh aplikasi setiap kali skema berubah.

Anda mungkin ingin mempertimbangkan alur kerja alternatif dan mengikuti langkah-langkah yang mirip dengan pendekatan hibrid. Alih-alih menghasilkan sekumpulan kelas baru setiap kali, Anda menunjukkan tabel tertentu untuk hanya menghasilkan kelas baru. Anda menyimpan kelas yang ada "apa adanya" dan langsung menambahkan atau menghapus properti yang berubah. Anda kemudian memperbarui konfigurasi model untuk mengatasi perubahan apa pun dalam cara database memetakan ke kelas yang ada.

Mengkustomisasi pembuatan kode

EF Core 6 saat ini tidak mendukung penyesuaian kode yang dihasilkan. Ada solusi pihak ketiga seperti EF Core Power Tools yang tersedia. Untuk daftar alat dan ekstensi komunitas unggulan, lihat: Alat dan Ekstensi Inti EF.

Terakhir, tinjau daftar detail perbedaan antara EF6 dan EF Core untuk mengatasi masalah yang tersisa dengan porting.