Consultas de registro ejecutadas por Entity Framework DbContext

Estoy usando EF 6.0 con LINQ en el proyecto MVC 5. Quiero registrar todas las consultas SQL ejecutadas por Entity Framework DbContext para fines de depuración / medición de rendimiento.

En Java / Hibernate, se puede lograr un comportamiento equivalente estableciendo la propiedad hibernate.show_sql=true . ¿Es posible tener un comportamiento similar en Entity Framework?

El artículo Logging and Intercepting Database Operations en MSDN es lo que está buscando.

La propiedad DbContext.Database.Log se puede establecer en un delegado para cualquier método que tome una cadena. Más comúnmente se usa con cualquier TextWriter al configurarlo en el método “Write” de ese TextWriter. Todos los SQL generados por el contexto actual se registrarán en ese escritor. Por ejemplo, el siguiente código registrará SQL en la consola:

 using (var context = new BlogContext()) { context.Database.Log = Console.Write; // Your code here... } 

Puede utilizar esta línea para iniciar sesión solo en la ventana “Salida” y no en la ventana de la consola, nuevamente solo en modo Depuración.

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