¿Cómo se hace usando el método ObjectQuery?Cómo ver las sentencias SQL generadas de LINQ?
Respuesta
Aquí está lo que encontré usando el método ObjectQuery. Con la consola para probar, puede hacer lo siguiente:
Cree un Método de extensión como se indica a continuación y llámelo. Diga Product product, luego SQL imprime como product.ToTraceString.
public static class MyExtensions
{
public static string ToTraceString<T>(this IQueryable<T> t)
{
string sql = "";
ObjectQuery<T> oqt = t as ObjectQuery<T>;
if (oqt != null)
sql = oqt.ToTraceString();
return sql;
}
}
Puede usar LINQPad para eso.
Dicen que es el uso de la Método ObjectQuery o Analizador de SQL. ¿Cómo lo hace programáticamente en una consola, por ejemplo? – nellbryant
No estoy seguro de haber entendido la última pregunta ... Al menos, para responder la pregunta en su título, "Cómo ver las sentencias SQL generadas de LINQ": LINQPad tiene una ventana de salida donde puede seleccionar "Resultados", "Lambda" o "SQL". –
¡Eh, esa es una buena herramienta de código abierto !. Gracias. – nellbryant
Se puede echar un vistazo a la Linq-to-SQL Debug Visualizer, o simplemente colocar el ratón sobre la consulta LINQ a SQL (información sobre herramientas debe mostrar el SQL generado), o acceso:
context.GetCommand(query).CommandText
Todavía no he probado GetCommand. Me gusta el enlace de Scott Gu! ¿Visualizer 2010 está integrado en Visualizer? – nellbryant
@nellbryant: no, sigue siendo una extensión separada que debe obtener de la galería VS –
Siempre se puede colocar algo para la propiedad .Log de su DataContext. Eso mostrará todos los comandos SQL a medida que se envían.
Hago esto en mi base para objetos de acceso a datos y lo envío a la consola de depuración de Visual Studio. Como los objetos crean su DataContext puedo comprobar que ver si su depuración y adjuntar una clase TextWritter ayudante de la siguiente manera:
dbDataContext _dB = new dbDataContext();
_dB.CommandTimeout = 5000;
#if DEBUG
_dB.Log = new DebugTextWriter();
#endif
Aquí es el objeto de ayuda para la salida de la consola de depuración:
//utility class for output of TextWriter for the Visual Sudio Debug window
class DebugTextWriter : System.IO.TextWriter
{
public override void Write(char[] buffer, int index, int count)
{
System.Diagnostics.Debug.Write(new String(buffer, index, count));
}
public override void Write(string value)
{
System.Diagnostics.Debug.Write(value);
}
public override Encoding Encoding
{
get { return System.Text.Encoding.Default; }
}
}
Para quienes usan ** Entity Framework 6 **, compruebe [this] (http://stackoverflow.com/a/20751723/2218697) , la esperanza ayuda a alguien – stom
Puede ejecutar el Analizador de SQL Server.
var q = from img in context.Images
...
select img;
string sql = q.ToString();
sql
contendrá la consulta de selección sql.
EDIT: Desventaja: parámetros no tendrán ningún valor en este momento
Si está depurando localmente y usando SQL Server, ejecute el Analizador de SQL. La consulta con todos los parámetros aparecerá allí. – Rich
sólo una pequeña actualización, ahora puede usar una acción para registrar el SQL:
// test SQL logger
Action<string> SQLLogger = (message) => System.Diagnostics.Debug.Write(message);
_dB.Context().Database.Log = SQLLogger;
- 1. linq a las entidades generadas sql
- 2. Agregar comentarios XML a las propiedades de clase generadas por el diseñador de LINQ to SQL
- 3. ¿Cómo puedo supervisar las sentencias sql ejecutadas en un SQL Server 2005?
- 4. ¿Las consultas generadas por linq se almacenan en caché de manera efectiva por SQL Server 2008?
- 5. cómo ver SQL generado desde una consulta de linq
- 6. ¿Cómo ver el SQL ejecutado por LINQ en Visual Studio?
- 7. [] corchetes en sentencias sql
- 8. ¿Cómo puedo ver el SQL ActiveRecord genera?
- 9. LINQ a SQL Tome w/o Skip Causas Varias sentencias SQL
- 10. Medición de la complejidad de las sentencias SQL
- 11. ¿Forma simple de ver consultas SQL generadas por informes de SSRS?
- 12. Cómo dividir sentencias Oracle sql para ADO.NET
- 13. Debugging Entity Framework Sentencias SQL
- 14. Biblioteca para analizar sentencias SQL
- 15. LINQ Sentencias Select - Donde no en
- 16. LINQ cláusula WHERE usando sentencias if
- 17. regex para analizar sentencias de SQL
- 18. ColdFusion ejecutando sentencias de SQL no deseadas
- 19. SQL Server Sentencias SELECT causantes de bloqueo
- 20. ¿Cómo puede ver el sql que causa un error en SubmitChanges en LINQ to SQL?
- 21. VisualStateManager y las transiciones generadas
- 22. ¿Cómo puedo hacer que las sentencias T-SQL PRINT aparezcan en las huellas del Analizador de SQL Server?
- 23. Cómo registrar consultas sql generadas de Simple.Data ORM para .NET
- 24. ¿Cómo usar las clases de fábrica con linq para sql?
- 25. cómo utilizar las sugerencias de tabla en LINQ a SQL
- 26. ¿Cómo evita LINQ-To-SQL Inyecciones SQL?
- 27. Sentencias SQL paramétricas vs. método muy simple
- 28. ¿Cómo puedo anular las secuencias de comandos SQL generadas por MigratorScriptingDecorator
- 29. Rieles: consulte las consultas SQL generadas en los archivos de registro
- 30. Prefijo de las clases generadas por JAXB
Se puede usar en la ventana VS Watch también: '((ObjectQuery) myQuery) .ToTraceString()'. ¡Buena esa! – icebat
¿Qué pasa con los métodos agregados como 'Count'? –
No creo que funcione cuando se usa dbContext ya que no se puede convertir IQueryable en ObjectQuery en este caso. –
NER1808