Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Log Penyata SQL Dijana oleh DbContext.SaveChanges() dalam Rangka Kerja Entiti?

Bagaimana untuk Log Penyata SQL Dijana oleh DbContext.SaveChanges() dalam Rangka Kerja Entiti?

Patricia Arquette
Lepaskan: 2025-01-04 16:23:41
asal
784 orang telah melayarinya

How to Log SQL Statements Generated by DbContext.SaveChanges() in Entity Framework?

Cara Log SQL Dijana daripada DbContext.SaveChanges()

Dalam Rangka Kerja Entiti (EF), anda boleh log penyata SQL yang dihasilkan dengan mudah dengan kaedah DbContext.SaveChanges() anda. Begini caranya:

Menggunakan Pangkalan Data.Harta Log:

Dalam EF 6.0 dan lebih baru, kelas Pangkalan Data mempunyai Action harta yang dipanggil Log. Dengan menetapkan sifat ini kepada fungsi yang menulis pada konsol, anda boleh log penyataan SQL yang dijana.

context.Database.Log = Console.WriteLine;
Salin selepas log masuk

Menggunakan Pemintas:

Jika anda memerlukan lebih lanjut keupayaan pembalakan, anda boleh menggunakan pemintas. Pemintas ialah kelas yang mewarisi daripada DbInterceptor dan mengatasi pelbagai kaedahnya. Satu kaedah sedemikian ialah OnNonQueryExecuted, yang dipanggil setiap kali pernyataan bukan pertanyaan dilaksanakan (seperti SaveChanges()).

Dalam kaedah OnNonQueryExecuted, anda boleh mengakses pernyataan SQL yang telah dilaksanakan dan logkannya ke fail, pangkalan data atau mana-mana lokasi lain.

Contoh Kod:

Berikut ialah contoh pemintas yang merekodkan pernyataan SQL ke fail:

public class SqlLoggerInterceptor : DbInterceptor
{
    private readonly TextWriter _logWriter;

    public SqlLoggerInterceptor(TextWriter logWriter)
    {
        _logWriter = logWriter;
    }

    public override void OnNonQueryExecuted(DbCommand command, DbCommandInterceptionContext interceptionContext)
    {
        _logWriter.WriteLine(command.CommandText);
    }
}
Salin selepas log masuk

Anda boleh mendaftarkan pemintas seperti ini:

Database.SetInitializer<MyContext>(null);
Database.AddInterceptor(new SqlLoggerInterceptor(File.AppendText("log.txt")));
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Log Penyata SQL Dijana oleh DbContext.SaveChanges() dalam Rangka Kerja Entiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan