Heim >Datenbank >MySQL-Tutorial >Wie protokolliere ich von DbContext.SaveChanges() generierte SQL-Anweisungen im Entity Framework?

Wie protokolliere ich von DbContext.SaveChanges() generierte SQL-Anweisungen im Entity Framework?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-04 16:23:41755Durchsuche

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

So protokollieren Sie generiertes SQL von DbContext.SaveChanges()

In Entity Framework (EF) können Sie die generierten SQL-Anweisungen einfach protokollieren durch Ihre DbContext.SaveChanges()-Methode. So geht's:

Verwenden der Database.Log-Eigenschaft:

In EF 6.0 und höher verfügt die Database-Klasse über eine Action Eigenschaft namens Log. Indem Sie diese Eigenschaft auf eine Funktion festlegen, die in die Konsole schreibt, können Sie die generierten SQL-Anweisungen protokollieren.

context.Database.Log = Console.WriteLine;

Verwendung von Interceptoren:

Wenn Sie mehr Fortgeschrittene benötigen Um die Protokollierungsfunktionen zu nutzen, können Sie einen Interceptor verwenden. Ein Interceptor ist eine Klasse, die von DbInterceptor erbt und deren verschiedene Methoden überschreibt. Eine solche Methode ist OnNonQueryExecuted, die immer dann aufgerufen wird, wenn eine Nicht-Abfrageanweisung ausgeführt wird (z. B. SaveChanges()).

In der OnNonQueryExecuted-Methode können Sie auf die ausgeführte SQL-Anweisung zugreifen und diese in einem protokollieren Datei, Datenbank oder an einem anderen Ort.

Beispiel Code:

Hier ist ein Beispiel für einen Interceptor, der die SQL-Anweisungen in einer Datei protokolliert:

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

Sie können den Interceptor wie folgt registrieren:

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

Das obige ist der detaillierte Inhalt vonWie protokolliere ich von DbContext.SaveChanges() generierte SQL-Anweisungen im Entity Framework?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn