Integrasi Entity Framework Core dengan 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 Microsoft. EntityFrameworkCore.Tasks paket NuGet. 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. Hanya EF Core 9-10; dihapus dalam EF Core 11.
EFScaffoldModelStage Atur ke publish, build atau none untuk menunjukkan pada tahap mana model yang dikompilasi akan dihasilkan. Default diatur ke publish.
EFPrecompileQueriesStage Atur ke publish, build atau none untuk menunjukkan pada tahap mana kueri yang telah dikommpilasi akan dihasilkan. Default diatur ke publish.
DbContextName Kelas turunan DbContext yang akan digunakan. Nama kelas saja atau dengan namespace yang sepenuhnya memenuhi syarat. Jika opsi ini dihilangkan, EF Core akan melakukan pembuatan untuk semua kelas konteks dalam proyek.
EFTargetNamespace Namespace 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).

Catatan

Dimulai dengan EF Core 11, EFOptimizeContext properti telah dihapus. Properti EFScaffoldModelStage dan EFPrecompileQueriesStage sekarang bekerja secara independen dan tidak memerlukan bendera pengaktifan tambahan.

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.

Sumber Daya Tambahan: