집 >데이터 베이스 >MySQL 튜토리얼 >EF 6 동적 쿼리에서 매개 변수 스니핑을 방지하려면 어떻게 해야 합니까?
EF 6의 매개변수 스니핑
Entity Framework 6(EF 6)에서 대규모 동적 쿼리를 처리할 때 성능 문제가 발생할 수 있습니다. 매개변수 스니핑으로 인해. 이는 EF 6이 전달된 초기 매개 변수를 기반으로 쿼리의 실행 계획을 캐시하여 매개 변수가 변경될 때 비효율적인 실행을 초래할 때 발생합니다.
매개 변수 스니핑 문제를 해결하는 한 가지 솔루션은 "OPTION RECOMPILE"과 같은 옵션을 포함하는 것입니다. SQL 명령에. 이는 쿼리가 실행될 때마다 데이터베이스가 실행 계획을 다시 컴파일하도록 암시합니다. 그러나 EF 6은 기본적으로 이러한 옵션 추가를 지원하지 않습니다.
해결책: EF 가로채기 기능
EF 6은 내부 SQL 명령을 조작할 수 있는 가로채기 기능을 제공합니다. 실행되기 전에. 이를 통해 "OPTION RECOMPILE"과 같은 옵션을 동적으로 포함할 수 있습니다.
이 기능을 활용하려면 사용자 정의 IDbCommandInterceptor 클래스를 생성할 수 있습니다. 예:
public class OptionRecompileHintDbCommandInterceptor : IDbCommandInterceptor { // Add "OPTION RECOMPILE" hint to SQL commands before execution public void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext) { addQueryHint(command); } private static void addQueryHint(IDbCommand command) { if (command.CommandType != CommandType.Text || !(command is SqlCommand)) return; if (command.CommandText.StartsWith("select", StringComparison.OrdinalIgnoreCase) && !command.CommandText.Contains("option(recompile)")) { command.CommandText = command.CommandText + " option(recompile)"; } } }
이 인터셉터를 사용하려면 애플리케이션 시작 부분에 다음 줄을 추가하기만 하면 됩니다.
DbInterception.Add(new OptionRecompileHintDbCommandInterceptor());
이 솔루션을 구현하면 매개변수 스니핑 및 EF 6에서 동적 쿼리 성능을 향상시키세요.
위 내용은 EF 6 동적 쿼리에서 매개 변수 스니핑을 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!