Debugging Entity Framework SQL statements

For debugging EF queries, the easiest thing is to cast the query to ObjectQuery and use ToTraceString:

var query = myContext.MyTable
    .Where(r => r.Id == searchId)
    .Select(r => r);

Console.WriteLine(((ObjectQuery)query).ToTraceString());

This will show the underlying SQL for the query, and you can run the queries manually to debug why they are slow. Here is the MSDN link:

http://msdn.microsoft.com/en-us/library/system.data.objects.objectquery.totracestring.aspx

If you’re trying to get the SQL which is run when you call SaveChanges() on your context, it’s not as easy. You could take a look at EFTracingProvider:

http://blogs.msdn.com/b/jkowalski/archive/2009/06/11/tracing-and-caching-in-entity-framework-available-on-msdn-code-gallery.aspx

Or, assuming you use SQL Server, you can go directly to SQL Profiler and capture the T-SQL statements (this is my preferred approach).

Leave a Comment