是否有可能在执行之前获取为存储过程生成的实体框架的查询? 例如。调用sp
context.Test(1)
并获取字符串
exec [dbo] .Test 1
但执行前
答案 0 :(得分:2)
如果您正在使用Entity Framework 6,则可以使用查询拦截器在SQL生成和SQL执行之间注入代码。这是通过实施IDbInterceptor
来完成的。您可以附加到以下“事件”:
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);
}
}
您可以编写自定义拦截器来实现上面的界面,然后通过调用将其添加到您的EF中:
DbInterception.Add(new <your implementation>());
还有其他建议在这里查看实体框架生成的SQL:How do I view the SQL generated by the Entity Framework?,但这取决于您是想在执行之前只查看SQL还是执行某些操作。