Entity Framework 6.0 – Intercepting SQL produced by EF

By: Dan Lorenz | December 2, 2013

Entity Framework 6.0 was recently released. One of the new features added is called Interception. You can now add “hooks” into each Context to catch events to log or even change values. Setting up these Interceptors is very simple.

First, you need to create the Inteceptor class. There are two interfaces that you can use: IDbCommandTreeInterceptor and IDbCommandInterceptor. IDbCommandTreeInterceptor allows you to intercept the tree model that was created. Currently, you can only modify the SELECT queries. If EF creates a query that does not perform well, you can use this interceptor to modify the tree. However, this will get cached, so the event will only fire the first time. IDbCommandInterceptor allows you to manipulate the DbCommand object before and after Entity Framework makes the call to the database. You have full access to everything on that command, including CommandText and Parameters. You can log the SQL and the parameters. You can modify the CommandText and/or the Parameters however you want. Need to add SQL Server specific calls in the SQL being sent? No problem!

We will use IDbCommandInterceptor as an example since it will most likely be the most used. To create one, just create a new class and have it inherit from IDbCommandInterceptor. There are six methods you must implement. Here is what a basic skeleton would look like:

If you add code to the Executing calls, you can manipulate the SQL before it is being sent to the database. If you add code to the Executed calls, you can manipulate the results that were returned by the database. (See our software development solutions)

Finally, you need to create a static constructor for your context if you haven’t already. Then you add one line of code that references the Interceptor class you created. From the previous example, the code would look like this:

That’s it! Now whenever Entity Framework is about to make a call to the database, the methods in MyInterceptor will fire. You can even put break points and see all the data being passed through.

If you need to pull out the current Context for some reason, you can do it via this code:

Dan is a highly skilled Solution Architect with deep expertise in .NET languages, Windows Forms/Services, ASP.NET / JavaScript, MonoDroid, and Win 8 (XAML) - among others.

Subscribe to our Newsletter

Stay informed on the latest technology news and trends

Relevant Insights

Healthcare Personalized Medicine: Leveraging Genomics and AI for Tailored Treatments

Faster, cheaper genome sequencing and more intelligent AI algorithms promise a new era of precision medicine. Genomics and artificial intelligence...
Read More about Healthcare Personalized Medicine: Leveraging Genomics and AI for Tailored Treatments

.NET MAUI and the Future of Xamarin 

At the 2020 Microsoft Build Conference, the company announced .NET MAUI as the next evolution to Xamarin.Forms. This move comes...
Read More about .NET MAUI and the Future of Xamarin 

Your Student Data Deserves a Higher Grade of Clarity

Discover the intelligent way to manage and leverage student data for optimum outcomes. Is your school district or institution drowning...
Read More about Your Student Data Deserves a Higher Grade of Clarity