varios seleccionar program expresiones dato convertir consultas consulta con campos asp.net linq-to-sql

asp.net - program - seleccionar campos con linq



Cómo rastrear consultas en un DataContext de Linq a sql (4)

En el podcast del código de manada 14, alguien menciona que stackoverflow muestra las consultas que se ejecutaron durante una solicitud en la parte inferior de la página.

Me parece una excelente idea. Cada vez que se carga una página, quiero saber qué sentencias SQL se ejecutan y también un recuento de la cantidad total de viajes de ida y vuelta. ¿Alguien tiene una solución clara para este problema?

¿Cuál crees que es una cantidad aceptable de consultas? Estaba pensando que, durante el desarrollo, podría hacer que mi aplicación arrojara una excepción si se requieren más de 30 consultas para representar una página.

EDIT: Creo que no debo haber explicado mi pregunta claramente. Durante una solicitud HTTP, una aplicación web puede ejecutar una docena o más sentencias SQL. Quiero que esas declaraciones se agreguen al final de la página, junto con un recuento de la cantidad de declaraciones.

AQUÍ ESTÁ MI SOLUCIÓN:

Creé una clase TextWriter en la que el DataContext puede escribir:

public class Logger : StreamWriter { public string Buffer { get; private set; } public int QueryCounter { get; private set; } public Logger() : base(new MemoryStream()) {} public override void Write(string value) { Buffer += value + "<br/><br/>"; if (!value.StartsWith("--")) QueryCounter++; } public override void WriteLine(string value) { Buffer += value + "<br/><br/>"; if (!value.StartsWith("--")) QueryCounter++; } }

En el constructor de DataContext configuré el registrador:

public HeraldDBDataContext() : base(ConfigurationManager.ConnectionStrings["Herald"].ConnectionString, mappingSource) { Log = new Logger(); }

Finalmente, utilizo el evento Application_OnEndRequest para agregar los resultados al final de la página:

protected void Application_OnEndRequest(Object sender, EventArgs e) { Logger logger = DataContextFactory.Context.Log as Logger; Response.Write("Query count : " + logger.QueryCounter); Response.Write("<br/><br/>"); Response.Write(logger.Buffer); }



Si pones .ToString () en una variable de consulta var, obtienes el sql. Puedes usarlo en Debug en VS2008. Debug Visualizer

ex:

var query = from p in db.Table select p; MessageBox.SHow(query.ToString());


System.IO.StreamWriter httpResponseStreamWriter = new StreamWriter(HttpContext.Current.Response.OutputStream); dataContext.Log = httpResponseStreamWriter;

Pegue eso en su página y obtendrá el SQL volcado en la página. Obviamente, envolveré eso en un pequeño método que puedes habilitar / deshabilitar.