Maison >base de données >tutoriel mysql >Comment enregistrer les instructions SQL générées par DbContext.SaveChanges() dans Entity Framework ?

Comment enregistrer les instructions SQL générées par DbContext.SaveChanges() dans Entity Framework ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-04 16:23:41753parcourir

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

Comment enregistrer le SQL généré à partir de DbContext.SaveChanges()

Dans Entity Framework (EF), vous pouvez facilement enregistrer les instructions SQL générées par votre méthode DbContext.SaveChanges(). Voici comment :

Utilisation de la propriété Database.Log :

Dans EF 6.0 et versions ultérieures, la classe Database a une classe Action propriété appelée Log. En définissant cette propriété sur une fonction qui écrit dans la console, vous pouvez enregistrer les instructions SQL générées.

context.Database.Log = Console.WriteLine;

Utilisation d'intercepteurs :

Si vous avez besoin de fonctionnalités plus avancées capacités de journalisation, vous pouvez utiliser un intercepteur. Un intercepteur est une classe qui hérite de DbInterceptor et remplace ses différentes méthodes. L'une de ces méthodes est OnNonQueryExecuted, qui est appelée chaque fois qu'une instruction non-requête est exécutée (telle que SaveChanges()).

Dans la méthode OnNonQueryExecuted, vous pouvez accéder à l'instruction SQL qui a été exécutée et la consigner dans un fichier, base de données ou tout autre emplacement.

Exemple de code :

Voici un exemple d'un intercepteur qui enregistre les instructions SQL dans un fichier :

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

Vous pouvez enregistrer l'intercepteur comme ceci :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn