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
Patricia Arquetteasal
2025-01-04 16:23:41840semak imbas

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;

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);
    }
}

Anda boleh mendaftarkan pemintas seperti ini:

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

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!

Kenyataan:
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