Menangani Tamat Masa Rangka Kerja Entiti: Panduan Komprehensif
Pertanyaan Rangka Kerja Entiti (EF) terhadap set data yang besar kadangkala boleh melebihi tamat masa lalai, biasanya 30 saat. Walaupun selepas melaraskan rentetan sambungan CommandTimeout
, anda mungkin masih menghadapi masalah. Ini selalunya berpunca daripada salah faham tentang cara EF mengendalikan tamat masa.
Kesalahan Tetapan Rentetan Sambungan
Ramai pembangun tersilap percaya menetapkan Default Command Timeout
dalam rentetan sambungan secara langsung memberi kesan kepada tingkah laku tamat masa EF. Walau bagaimanapun, ini tidak berkesan dan pengehadan yang diketahui (lihat ID pepijat 56806: https://www.php.cn/link/91a448039265fc4a83f545a4945e37a3).
Penyelesaian: Kawalan Tamat Masa Terus
Pendekatan yang betul ialah mengurus tamat masa secara eksplisit pada tahap konteks EF. Ini menjamin tetapan tamat masa digunakan pada pertanyaan anda. Pelaksanaannya berbeza sedikit bergantung pada versi EF anda:
Rangka Kerja Entiti Teras 1.0 dan lebih baharu:
<code class="language-csharp">this.context.Database.SetCommandTimeout(180);</code>
Rangka Kerja Entiti 6:
<code class="language-csharp">this.context.Database.CommandTimeout = 180;</code>
Rangka Kerja Entiti 5:
<code class="language-csharp">((IObjectContextAdapter)this.context).ObjectContext.CommandTimeout = 180;</code>
Rangka Kerja Entiti 4 dan lebih awal:
<code class="language-csharp">this.context.CommandTimeout = 180;</code>
Dengan menetapkan CommandTimeout
kepada nilai seperti 180 saat (atau tempoh yang lebih sesuai untuk pertanyaan anda), anda mengawal secara langsung masa pelaksanaan yang dibenarkan untuk operasi pangkalan data, dengan berkesan menghalang tamat masa walaupun dengan set data yang banyak. Ingat untuk melaraskan nilai ini berdasarkan keperluan khusus anda.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyelesaikan Tamat Masa Rangka Kerja Entiti dengan Berkesan, Walaupun dengan Set Data Besar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!