.AsNoTracking() dalam Teras EF: Penjelasan terperinci dan kesan kemas kini
Kaedah .AsNoTracking()
dalam EF Core selalunya mengelirukan, terutamanya untuk pemula. Untuk menggambarkan peranannya, mari kita menganalisis senario tertentu dan kesannya terhadap interaksi pangkalan data.
Anggap bahawa entiti tapak web disimpan dalam konteks setiap permintaan. Banyak entiti kekal tidak berubah dan tidak perlu dijejaki. Walau bagaimanapun, senario berikut memberikan soalan yang sukar:
<code class="language-csharp">context.Set<User>().AsNoTracking() // 步骤 1) 获取用户 context.Set<User>() // 步骤 2) 更新用户</code>
Sebagai alternatif, kami boleh mengalih keluar .AsNoTracking()
daripada langkah 1:
<code class="language-csharp">context.Set<User>(); // 步骤 1) 获取用户 context.Set<User>() // 步骤 2) 更新用户</code>
Dalam kedua-dua kes, konteks digunakan untuk mendapatkan semula (langkah 1) dan mengemas kini (langkah 2), tetapi ia berlaku pada masa yang berbeza. Persoalannya ialah: adakah ia membuat perbezaan?
Jawapannya terletak pada sifat pengesanan. Dalam senario pertama, langkah 1 menggunakan .AsNoTracking()
, pengguna yang diambil tidak akan dijejaki oleh konteks. Ini bermakna apabila mengemas kini pengguna (langkah 2), anda mesti melampirkan pengguna secara manual dan secara eksplisit menetapkan statusnya kepada "Diubah suai". Ini memberitahu EF Core untuk mengemas kini pengguna sedia ada dan bukannya mencipta rekod baharu.
Sebaliknya, dalam kes kedua, tanpa .AsNoTracking()
, anda tidak perlu melakukan langkah manual ini jika anda memuatkan dan menyimpan pengguna dalam contoh konteks yang sama. Mekanisme penjejakan mengendalikan ini secara automatik, menyediakan pengguna yang dikemas kini tanpa konfigurasi tambahan.
Untuk meringkaskan, perbezaan antara kedua-dua kaedah ini ialah .AsNoTracking()
melumpuhkan penjejakan entiti yang diambil, memerlukan pengurusan manual keadaan objek dan lampiran semasa kemas kini. Menggunakan konteks yang sama untuk mendapatkan semula dan mengemas kini tanpa .AsNoTracking()
memudahkan proses ini, kerana mekanisme penjejakan mengendalikan aspek ini secara telus.
Atas ialah kandungan terperinci EF Core AsNoTracking(): Bilakah Penting untuk Kemas Kini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!