Teras Rangka Kerja Entiti .AsNoTracking(): Prestasi lwn. Penjejakan
Teras Rangka Kerja Entiti (Teras EF) menawarkan .AsNoTracking()
untuk meningkatkan prestasi dengan mengelakkan penjejakan perubahan untuk entiti yang diambil semula. Artikel ini mengkaji cara penggunaan .AsNoTracking()
mempengaruhi pengemaskinian entiti apabila contoh konteks berbeza terlibat.
Memahami Penjejakan Perubahan dalam Teras EF
EF Core biasanya menjejaki entiti yang diambil daripada pangkalan data, memantau perubahan untuk kemas kini yang cekap. .AsNoTracking()
melumpuhkan ini, meningkatkan prestasi apabila pengubahsuaian tidak dijangka.
Senario: Mendapatkan semula dan Mengemas kini dengan Konteks Berasingan
Senario kami melibatkan mendapatkan semula entiti (mis., pengguna) menggunakan .AsNoTracking()
dan seterusnya mengemas kininya menggunakan konteks Teras EF yang berbeza.
Kesan .AsNoTracking()
Apabila .AsNoTracking()
digunakan, entiti yang diambil menjadi terpisah daripada konteks. Percubaan untuk mengemas kini entiti ini dengan konteks baharu tidak akan mencetuskan kemas kini secara automatik; konteks tidak akan mengenalinya sebagai rekod sedia ada. Anda mesti melampirkan entiti yang diubah suai secara manual pada konteks baharu dan secara eksplisit menetapkan keadaannya kepada EntityState.Modified
untuk menunjukkan kemas kini diperlukan.
Mengabaikan .AsNoTracking()
Sebaliknya, jika .AsNoTracking()
ditinggalkan, EF Core menjejaki entiti yang diambil. Mengemas kini entiti ini dengan konteks yang berbeza akan dikendalikan secara automatik oleh EF Core, menghapuskan keperluan untuk lampiran manual dan tetapan keadaan.
Memilih Pendekatan yang Betul
Menggunakan .AsNoTracking()
meningkatkan prestasi jika anda pasti entiti itu tidak akan diubah suai. Walau bagaimanapun, jika kemas kini dijangka, meninggalkan .AsNoTracking()
memudahkan proses kemas kini, kerana EF Core mengendalikan penjejakan secara automatik. Pilihan bergantung pada keperluan khusus anda dan sama ada peningkatan prestasi melebihi kerumitan tambahan pengendalian kemas kini manual.
Atas ialah kandungan terperinci Bagaimanakah .AsNoTracking() Mempengaruhi Kemas Kini Entiti Apabila Menggunakan Contoh Konteks Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!