I've using Entity Framework CTP5 in "code only" mode. I'm running a LINQ query on a object that was return from the database, as the query is running really slowly. Is there any way in which I can get the SQL statement that is being generated from the query?
Topic currentTopic =
(from x in Repository.Topics
let isCurrent = (x.StoppedAt <= x.StartedAt || (x.StartedAt >= currentTopicsStartedAtOrAfter))
where x.Meeting.Manager.User.Id == user.Id && isCurrent
orderby x.StartedAt descending
select x).FirstOrDefault();
The "Repository" property is a descendent of DbContext.
It's a little complicated, as EF can't use my helper methods on the objects, so I'm specifying the logic directly in the query.
So, is there any way I can dump the SQL that will be produced by that LINQ query (e.g. to my log4net repository)?
Entity Framework Core uses Language-Integrated Query (LINQ) to query data from the database. LINQ allows you to use C# (or your . NET language of choice) to write strongly typed queries. It uses your derived context and entity classes to reference database objects.
You can try using Entity Framework tracing provider as described here (but it is old post for CTP3).
Your other choices are:
In common EF you can also use ToTraceString
as @Andy suggested but DbQuery
in CodeFirst doesn't have this method (or I didn't find it).
Edit:
So DbQuery
doesn't have ToTraceString
because it is directly implemented as ToString
.
This worked for me and it is free:
public static class DebugExtensions
{
private static object GetPropertyValue(object o, string Name)
{
return o.GetType().GetProperties(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public).Where(x => x.Name == Name).First().GetValue(o, null);
}
public static string ToTraceString(this IQueryable query)
{
var oquery = (ObjectQuery)GetPropertyValue(GetPropertyValue(query, "InternalQuery"), "ObjectQuery");
return oquery.ToTraceString();
}
}
Usage:
var rows = db.Forecasts.Take(1);
System.Diagnostics.Debug.WriteLine(rows.ToTraceString());
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With