1

Is it possible to get query that entity framework generated for stored procedure before execution? E.g. calling sp

context.Test(1)

and get the string

exec [dbo].Test 1

but before execution

Karan Singh
  • 876
  • 1
  • 6
  • 12
Alexandr Sargsyan
  • 656
  • 1
  • 6
  • 21

1 Answers1

2

If you're using Entity Framework 6, then you can use Query Interceptors to inject code between SQL generation and SQL execution. It is done by implementing IDbInterceptor. You can attach to the following "events":

namespace System.Data.Entity.Infrastructure.Interception
{
  public interface IDbCommandInterceptor : IDbInterceptor
  {
    void NonQueryExecuting(DbCommand command, DbCommandInterceptionContext<int> interceptionContext);

    void NonQueryExecuted(DbCommand command, DbCommandInterceptionContext<int> interceptionContext);

    void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext);

    void ReaderExecuted(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext);

    void ScalarExecuting(DbCommand command, DbCommandInterceptionContext<object> interceptionContext);

    void ScalarExecuted(DbCommand command, DbCommandInterceptionContext<object> interceptionContext);
  }
}

You can write custom interceptor implmenting the interface above and then add it into your EF by calling:

DbInterception.Add(new <your implementation>());

There are also other suggestions of viewing the SQL generated by Entity Framework here: How do I view the SQL generated by the Entity Framework?, but it depends whether you want to just view the SQL or to perform some actions before it is executed.

Marcin Zablocki
  • 10,171
  • 1
  • 37
  • 47