web-dev-qa-db-fra.com

Requêtes de journal exécutées par Entity Framework DbContext

J'utilise EF 6.0 avec LINQ dans le projet MVC 5. Je souhaite consigner toutes les requêtes SQL exécutées par Entity Framework DbContext à des fins de débogage/de mesure des performances.

En Java/Hibernate, un comportement équivalent peut être obtenu en définissant la propriété hibernate.show_sql=true. Est-il possible d'avoir un comportement similaire dans Entity Framework?

31
PC.

Journalisation et interception des opérations de base de données l'article sur MSDN est ce que vous recherchez.

La propriété DbContext.Database.Log Peut être définie sur un délégué pour toute méthode qui prend une chaîne. Le plus souvent, il est utilisé avec n'importe quel TextWriter en le définissant sur la méthode "Write" de ce TextWriter. Tout le SQL généré par le contexte actuel sera enregistré sur ce rédacteur. Par exemple, le code suivant enregistrera SQL dans la console:

using (var context = new BlogContext())
{
    context.Database.Log = Console.Write;

    // Your code here...
}
54
Andrew

Vous pouvez utiliser cette ligne pour vous connecter uniquement à la fenêtre "Sortie" et non à une fenêtre de console, toujours en mode Débogage uniquement.

public class YourContext : DbContext
{   
    public YourContext()
    {
        Database.Log = sql => Debug.Write(sql);
    }
}
29
Dennis Mieszala

Si vous avez une configuration .NET Core avec un enregistreur, EF enregistrera ses requêtes sur la sortie que vous souhaitez: fenêtre de sortie de débogage, console, fichier, etc.

Il vous suffit de configurer le niveau du journal "Informations" dans vos paramètres d'application. Par exemple, cela a la journalisation EF dans la fenêtre de sortie de débogage:

"Logging": {
  "PathFormat": "Logs/log-{Date}.txt",
  "IncludeScopes": false,
  "Debug": {
    "LogLevel": {
      "Default": "Information",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "Console": {
    "LogLevel": {
      "Default": "Information",
      "System": "Warning",
      "Microsoft": "Warning"
    }
  },
  "File": {
    "LogLevel": {
      "Default": "Information",
      "System": "Warning",
      "Microsoft": "Warning"
    }
  },
  "LogLevel": {
    "Default": "Information",
    "System": "Warning",
    "Microsoft": "Warning"
  }
}
2
Jay