Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengelakkan Menghidu Parameter dalam Pertanyaan Dinamik EF 6?
Parameter Menghidu dalam EF 6
Apabila berurusan dengan pertanyaan dinamik yang besar dalam Rangka Kerja Entiti 6 (EF 6), anda mungkin menghadapi masalah prestasi disebabkan oleh parameter menghidu. Ini berlaku apabila EF 6 menyimpan cache pelan pelaksanaan pertanyaan berdasarkan parameter awal yang diluluskan, mengakibatkan pelaksanaan tidak cekap apabila parameter berubah.
Satu penyelesaian untuk menangani penghidu parameter adalah dengan membenamkan pilihan seperti "OPTION RECOMPILE" ke dalam arahan SQL. Ini membayangkan pangkalan data untuk menyusun semula rancangan pelaksanaan setiap kali pertanyaan dilaksanakan. Walau bagaimanapun, EF 6 tidak menyokong penambahan pilihan sedemikian secara asli.
Penyelesaian: Ciri Pemintasan EF
EF 6 menyediakan ciri pemintasan yang membolehkan anda memanipulasi arahan SQL dalamannya sebelum mereka dihukum bunuh. Ini membolehkan anda membenamkan pilihan seperti "OPTION RECOMPILE" secara dinamik.
Untuk menggunakan ciri ini, anda boleh mencipta kelas IDbCommandInterceptor tersuai. Contohnya:
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)"; } } }
Untuk menggunakan pemintas ini, cuma tambah baris berikut pada permulaan aplikasi anda:
DbInterception.Add(new OptionRecompileHintDbCommandInterceptor());
Dengan melaksanakan penyelesaian ini, anda boleh mengelak daripada menghidu parameter dan meningkatkan prestasi pertanyaan dinamik anda dalam EF 6.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelakkan Menghidu Parameter dalam Pertanyaan Dinamik EF 6?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!