Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mengelakkan Menghidu Parameter dalam Pertanyaan Dinamik EF 6?

Bagaimanakah Saya Boleh Mengelakkan Menghidu Parameter dalam Pertanyaan Dinamik EF 6?

Linda Hamilton
Lepaskan: 2024-12-23 20:22:13
asal
438 orang telah melayarinya

How Can I Avoid Parameter Sniffing in EF 6 Dynamic Queries?

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)";
        }
    }
}
Salin selepas log masuk

Untuk menggunakan pemintas ini, cuma tambah baris berikut pada permulaan aplikasi anda:

DbInterception.Add(new OptionRecompileHintDbCommandInterceptor());
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan