Entity Framework 6 - How can I view the SQL that will be generated for an insert before calling SaveChanges

c# entity-framework


In Entity Framework 6, is it possible to view the SQL that will be executed for an insert before calling SaveChanges?

using (var db = new StuffEntities()){
    db.Things.Add(new Thing({...});
    //can I get the SQL insert statement at this point?

I'm familiar with how to get the generated SQL for a query before execution like so:

var query = db.Thing.Where(x => x.ID == 9);
//this prints the SQL select statement

The query returns an IQueryable<> whereas an insert returns a DbSet and calling ToString on a DbSet just prints the standard object name.

4/21/2016 7:43:34 PM

Accepted Answer

Another option (if I understand your question correctly), would be to use an IDbCommandInterceptor implementation, which seemingly allows you to inspect SQL commands before they are executed (I hedge my words as I have not used this myself).

Something like this:

public class CommandInterceptor : IDbCommandInterceptor
    public void NonQueryExecuting(
        DbCommand command, DbCommandInterceptionContext<int> interceptionContext)
        // do whatever with command.CommandText

Register it using the DBInterception class available in EF in your context static constructor:

static StuffEntities()
    Database.SetInitializer<StuffEntities>(null); // or however you have it
    System.Data.Entity.Infrastructure.Interception.DbInterception.Add(new CommandInterceptor());
3/28/2017 12:08:59 PM

Popular Answer

The easiest way in EF6 To have the query always handy, without changing code is to add this to your DbContext and then just check the query on the output window in visual studio, while debugging.

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    Database.Log = (query)=> Debug.Write(query);


LINQPad is also a good option to debug Linq with and can also show the SQL queries.

Related Questions


Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow