Dalam pengembangan, saat menggunakan kerangka kerja inti ef, saat menggunakan ekspresi linq atau lambda, kami tidak dapat secara langsung melihat pernyataan sql, yang tidak nyaman bagi kami untuk memecahkan masalah atau mengoptimalkan kinerja.
Artikel ini menggunakan EF Core 5 sebagai contohuntuk melihat pernyataan SQL yang dihasilkan oleh EF output.
Pertama, buat variabel pabrik consolelogger baru dalam file startup dengan variabel "ConsoleLoggerFactory", dan pernyataan sql yang dihasilkan akan dikeluarkan ke konsol, kodenya adalah sebagai berikut:
Tambahkan output log ke metode ConfigureServices dengan mengonfigurasi kode DbContext sebagai berikut:
Mulai proyek dan lihat output konsol sebagai berikut:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Menjalankan DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] PILIH [a]. [Id], [a]. [Dinonaktifkan], [a]. [Tautan], [a]. [Nama], [a]. [PinYin], [a]. [Posisi], [a]. [_CreateTime], [a]. [_CreateTimeStamp], [a]. [_UpdateTime], [a]. [_UpdateTimeStamp] DARI [Area] AS [a]
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Menjalankan DbCommand (19ms) [Parameters=[p0='?' (Ukuran = 4000)], CommandType='Teks', CommandTimeout='30'] PILIH * DARI Area DI MANA pinYin = @p0
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Menjalankan DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] PILIH * DARI Area
Jika pernyataan SQL dengan kondisi where hanya dapat melihat variabel berparameter, bukan nilai spesifik yang dilewati, konfigurasi berikut ditambahkan:
Aktifkan data aplikasi untuk disertakan dalam pesan pengecualian, log, dan lainnya.
Ini dapat mencakup nilai yang ditetapkan ke properti instans entitas,
nilai parameter perintah yang dikirim ke database, dan data serupa lainnya.
Bendera ini hanya boleh diaktifkan jika ada langkah-langkah keamanan
Berdasarkan sensitivitas data ini.
Perhatikan jika aplikasi sedang berjalan
Panggil Microsoft.EntityFrameworkCore.DbContextOptions generator.UseInternalServiceProvider(system. IServiceProvider),
Opsi ini kemudian harus dikonfigurasi dengan cara yang sama untuk semua penggunaan penyedia layanan tersebut.
Pertimbangkan untuk tidak memanggil Microsoft.EntityFrameworkCore.DbContextOptionsGenerator.UseInternalServiceProvider(system. Penyedia Wakil)
Oleh karena itu, EF akan mengelola penyedia layanan dan dapat membuat instance baru sesuai kebutuhan
Pengaturan lengkapnya adalah sebagai berikut:
Renderingnya adalah sebagai berikut:
Tentu saja, pengaturan di atas juga dapat dikonfigurasi dengan mengganti metode OnConfiguring dari DbContext (tidak disarankan):
(Akhir)
|