Few days back I was optimizing the performance with Entity framework and Linq queries and I was using LinqPad and looking SQL generated by the Linq or entity framework queries. After some point of time I got the same question in mind that how I can find the SQL Statement generated by Entity framework?
After some struggling I have managed to found the way of finding SQL Statement so I thought it would be a great idea to write a post about same and share my knowledge about that. So in this post I will explain how to find SQL statements generated Entity framework queries.
To demonstrate the idea Let’s a very simple console application with C# and then create a table called ‘Customer’ with CustomerId and CustomerName field in sql server.
Now once our table is ready it’s time to create a Entity framework model.
Now once Model is ready It’s time to write a simple query in console application where we want to get all customer name like following.
So here in the above code for that. here I have created a object of my customer entity with help of using and then written a simple query to get all the customer name. Now with the help of System.Data.Objects.ObjectQuery class ToTraceString method I am able to find the SQL Generated by the statement. Here I have direct cast customerNames to ObjectQuery class and find sql generated by statement via ToTraceString method.
Now let’s run this console application via pressing F5 and following is a output as expected.
As you can see the SQL statement generated by entity framework. Hope you like it. Stat tuned for more.
After some struggling I have managed to found the way of finding SQL Statement so I thought it would be a great idea to write a post about same and share my knowledge about that. So in this post I will explain how to find SQL statements generated Entity framework queries.
To demonstrate the idea Let’s a very simple console application with C# and then create a table called ‘Customer’ with CustomerId and CustomerName field in sql server.
Now once our table is ready it’s time to create a Entity framework model.
Now once Model is ready It’s time to write a simple query in console application where we want to get all customer name like following.
using System; using System.Runtime.CompilerServices; using System.Linq; using System.Data; namespace EntityframeworkSQL { class Program { static void Main(string[] args) { using (CustomerEntities customerEntities = new CustomerEntities()) { var customerNames = from c in customerEntities.Customers select c.CustomerName; string sql = ((System.Data.Objects.ObjectQuery)customerNames).ToTraceString(); Console.WriteLine(sql); } } } }
So here in the above code for that. here I have created a object of my customer entity with help of using and then written a simple query to get all the customer name. Now with the help of System.Data.Objects.ObjectQuery class ToTraceString method I am able to find the SQL Generated by the statement. Here I have direct cast customerNames to ObjectQuery class and find sql generated by statement via ToTraceString method.
Now let’s run this console application via pressing F5 and following is a output as expected.
As you can see the SQL statement generated by entity framework. Hope you like it. Stat tuned for more.
Good Post Jalpesh!
ReplyDeleteOnly issue I see is that the sql in the command window doesn't match what was asked of the linq query. You asked for CustomerName and the sql is returning the CustomerID and the CustomerName. Why not just use the SQL Server Profiler ?
ReplyDeleteThe only issue I see is the sql in the command window doesn't match what was asked of the LINQ query. The LINQ query asked for the CustomerName whereas the sql in the command window is asking for the CustomerID and the CustomerName. Why not just use the SQL Server Profiler ?
ReplyDeleteNice! Thanks for this. This will help with a project of mine.
ReplyDelete@LN- If you see the query carefully its fetching the customer name only!! where you see the customerid?
ReplyDelete@google-48856e094345038f4eea4ff63eb755f8:disqus - SQL profiler is good way but sometime we need allow to use sql profiler with limtied access
ReplyDelete@disqus_p4nxFVmxZ5:disqus - thanks for compliements!!
ReplyDelete@a51a37bdcf25ac8ab00ba6a0204b042a:disqus - thanks for compliments
ReplyDeleteHow I can find SQL staement for Linq-To-SQL Queries
ReplyDelete@disqus_6YlGyHjTo0:disqus - I will post that in next blog post!!
ReplyDeleteI think this for Entity Framework using Model-first approach but is it same for Code-first approach or else ?
ReplyDelete@facebook-762153671:disqus - I think it should work for both but still have not tried it on code first approach but I will try and let you know.
ReplyDelete