Integrasi Entity Framework Core MSBuild
Dimulai dengan EF 9, Anda dapat menggunakan tugas MSBuild untuk menghasilkan model yang dikompilasi dan kueri yang telah dikompilasi secara otomatis baik saat proyek dibangun atau saat diterbitkan. Ini terutama dimaksudkan untuk digunakan dengan penerbitan NativeAOT.
Peringatan
Dukungan NativeAOT dan integrasi MSBuild adalah fitur eksperimental, dan belum cocok untuk penggunaan produksi.
Menginstal tugas
Untuk memulai, instal paket NuGet Microsoft.EntityFrameworkCore.Tasks . Contoh:
dotnet add package Microsoft.EntityFrameworkCore.Tasks
Catatan
Setiap proyek yang perlu dikompilasi dengan file yang dihasilkan harus mereferensikan paket NuGet, itu tidak transitif secara default.
Menggunakan tugas
Jika proyek menentukan <PublishAot>true</PublishAot>
maka secara default tugas MSBuild akan menghasilkan model yang dikompilasi dan kueri yang telah dikompilasi selama penerbitan. Jika tidak, Anda dapat mengatur properti berikut untuk mengontrol perilaku pembuatan:
Properti MSBuild | Deskripsi |
---|---|
EFOptimizeContext | Atur ke true untuk mengaktifkan integrasi MSBuild. |
EFScaffoldModelStage | Atur ke publish , build atau none untuk menunjukkan pada tahap mana model yang dikompilasi akan dihasilkan. Default ke publish . |
EFPrecompileQueriesStage | Atur ke publish , build atau none untuk menunjukkan pada tahap mana kueri yang telah dikommpilasi akan dihasilkan. Default ke publish . |
DbContextName | Kelas turunan DbContext yang akan digunakan. Nama kelas saja atau sepenuhnya memenuhi syarat dengan namespace layanan. Jika opsi ini dihilangkan, EF Core akan melakukan pembuatan untuk semua kelas konteks dalam proyek. |
EFTargetNamespace | Namespace layanan yang digunakan untuk semua kelas yang dihasilkan. Jika opsi ini dihilangkan, EF Core akan menggunakan $(RootNamespace) . |
EFOutputDir | Folder untuk meletakkan file yang dihasilkan sebelum proyek dikompilasi. Jika opsi ini dihilangkan, EF Core akan menggunakan $(IntermediateOutputPath) . |
EFNullable | Apakah jenis referensi nullable akan digunakan dalam kode yang dihasilkan. Jika opsi ini dihilangkan, EF Core akan menggunakan $(Nullable) . |
Batasan
- Saat menggunakan integrasi selama tahap
publish
, pastikan juga mengatur rid dalam proyek startup (misalnya <RuntimeIdentifier>win-x64</RuntimeIdentifier>) - Proyek startup yang berbeda tidak dapat ditentukan saat menggunakan pendekatan ini karena akan memperkenalkan dependensi build terbalik. Ini berarti bahwa proyek konteks harus otomatis dalam hal konfigurasi, jadi jika aplikasi Anda biasanya mengonfigurasi konteks menggunakan pembangun host dalam proyek yang berbeda, Anda harus menerapkan IDesignTimeDbContextFactory<TContext> dalam proyek konteks.
- Karena proyek harus dapat dikompilasi sebelum model yang dikompilasi dihasilkan, pendekatan ini tidak mendukung implementasi metode parsial untuk penyesuaian model yang dikompilasi.
- Saat ini, ini akan selalu menghasilkan kode tambahan dalam model yang dikompilasi yang diperlukan untuk NativeAOT. Jika Anda tidak berencana untuk mengaktifkan NativeAOT, buat model yang dikompilasi menggunakan alat CLI.