Rumah >pangkalan data >tutorial mysql >Bagaimanakah EF 6 Interception Boleh Menyelesaikan Tamat Masa Pertanyaan Berterusan Disebabkan oleh Menghidu Parameter?
EF 6 Parameter Sniffing Solution: Mengatasi Tamat Masa Pertanyaan
Walaupun kecekapan SQL yang dihasilkan oleh pertanyaan LINQ kepada Entiti anda, pelaksanaannya melalui EF 6 mengalami tamat masa pertanyaan berterusan. Ini mungkin disebabkan oleh penghidu parameter, teknik pengoptimuman prestasi yang digunakan oleh enjin pangkalan data. Tetapi anda tidak boleh hanya menambah arahan "OPTION RECOMPILE" terus pada pertanyaan EF anda.
Penyelesaian: Gunakan EF Interception
EF 6 menawarkan ciri pemintasan yang membolehkan anda untuk memanipulasi arahan SQL sebelum ia dilaksanakan pada pangkalan data. Dengan melaksanakan DbCommandInterceptor tersuai, anda boleh menambah petunjuk pertanyaan, termasuk "OPTION RECOMPILE," pada arahan dalaman.
Berikut ialah pelaksanaan pemintas sedemikian:
public class OptionRecompileHintDbCommandInterceptor : IDbCommandInterceptor { public void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext) { addQueryHint(command); } public void ScalarExecuting(DbCommand command, DbCommandInterceptionContext<object> 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)"; } } }
Untuk menggunakan pemintas ini , cuma tambah baris berikut pada permulaan permohonan anda:
DbInterception.Add(new OptionRecompileHintDbCommandInterceptor());
Ini akan memastikan bahawa semua arahan SQL yang dijana EF mempunyai pembayang "OPTION RECOMPILE" yang dilampirkan padanya, menghalang penghidu parameter dan meningkatkan prestasi pertanyaan.
Atas ialah kandungan terperinci Bagaimanakah EF 6 Interception Boleh Menyelesaikan Tamat Masa Pertanyaan Berterusan Disebabkan oleh Menghidu Parameter?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!