Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to view LINQ Generated SQL statements?

Tags:

linq

How is it done using the ObjectQuery method?

like image 623
nellbryant Avatar asked Feb 04 '11 15:02

nellbryant


People also ask

How can I see the SQL statement generated by Entity Framework?

To view the SQL that will be generated, simply call ToTraceString() . You can add it into your watch window and set a breakpoint to see what the query would be at any given point for any LINQ query. You can attach a tracer to your SQL server of choice, which will show you the final query in all its gory detail.

How LINQ queries converted into SQL queries?

LINQ to SQL translates the queries you write into equivalent SQL queries and sends them to the server for processing. More specifically, your application uses the LINQ to SQL API to request query execution. The LINQ to SQL provider then transforms the query into SQL text and delegates execution to the ADO provider.


2 Answers

You can always attach something to the .Log property of your DataContext. That will show all the SQL commands as they are sent.

I do this in my base for data access objects and output it to the Visual Studio debug console. As the objects create their DataContext I check it see if its debug and attach a TextWritter helper class like this:

dbDataContext _dB = new dbDataContext(); _dB.CommandTimeout = 5000;  #if DEBUG     _dB.Log = new DebugTextWriter(); #endif 

Here is the helper object for output to the debug console:

//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; }     } } 
like image 80
Tj Kellie Avatar answered Oct 13 '22 08:10

Tj Kellie


Here is what I found using ObjectQuery Method. Using console for testing, you can do the following:

Create an Extension Method as below, then call it. Say Product product, then SQL prints out as 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;     } } 
like image 42
nellbryant Avatar answered Oct 13 '22 10:10

nellbryant