Bagikan melalui


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.

Sumber Daya Tambahan: