Запрос может быть изменен в перехватчике.
EF 6
Реализация IDbCommandInterceptor
, например:
class EFCommandInterceptor: IDbCommandInterceptor
{
public void NonQueryExecuting(System.Data.Common.DbCommand command, DbCommandInterceptionContext<int> interceptionContext)
{
// Manipulate the command text, etc. here...
command.CommandText += " OPTION (OPTIMIZE FOR UNKNOWN)";
}
...
Регистрация:
public class FE6CodeConfig : DbConfiguration
{
public FE6CodeConfig()
{
this.AddInterceptor(new EFCommandInterceptor());
}
}
Подробнее здесь
EF Core
Также EF Core имеет перехватчики в настоящее время . Вам нужен EF Core 3 или более поздней версии.
В то время как EF Core 3 требуется. NET Стандарт 2.1 (т. NET Core 3 и более поздние версии), EF Core 3.1 поддерживает. NET Стандарт 2.0, т. Е. NET Core 2 и. NET Framework 4.6.1 +
Наследование DbCommandInterceptor
, например,
public class HintCommandInterceptor : DbCommandInterceptor
{
public override InterceptionResult ReaderExecuting(
DbCommand command,
CommandEventData eventData,
InterceptionResult result)
{
// Manipulate the command text, etc. here...
command.CommandText += " OPTION (OPTIMIZE FOR UNKNOWN)";
return result;
}
}
Регистрация:
services.AddDbContext(b => b
.UseSqlServer(connectionString)
.AddInterceptors(new HintCommandInterceptor())