.AsNoTracking(): Rangka Kerja Entiti (): Penyelaman Dalam Interaksi Pangkalan Data dan Penjejakan Entiti
Kaedah .AsNoTracking()
Rangka Kerja Entiti mempengaruhi cara rangka kerja mengurus entiti dan berinteraksi dengan pangkalan data. Analisis ini menjelaskan kesan .AsNoTracking()
melalui contoh praktikal.
Pertimbangkan coretan kod ini:
Senario 1: Menggunakan .AsNoTracking()
context.Set<user>().AsNoTracking() // Step 1: Retrieve user // Step 2: Update user
Senario 2: Tanpa .AsNoTracking()
context.Set<user>(); // Step 1: Retrieve user // Step 2: Update user
Kedua-dua senario mendapatkan semula pengguna (Langkah 1) dan kemudian mengemas kininya (Langkah 2) dalam konteks yang sama. Perbezaan kritikal terletak pada kehadiran .AsNoTracking()
dalam senario pertama.
Kesan .AsNoTracking()
Dalam Senario 1, .AsNoTracking()
menghalang user
yang diambil daripada dijejaki oleh konteks Rangka Kerja Entiti. Ini bermakna konteks tidak mengekalkan rujukan kepada objek user
dan sebarang pengubahsuaian yang dibuat padanya tidak akan dipaparkan secara automatik dalam pangkalan data.
Sebaliknya, dalam Senario 2, tanpa .AsNoTracking()
, user
yang diambil semula dijejaki. Oleh itu, apabila dikemas kini dalam Langkah 2, konteks mengesan perubahan ini dan menyediakan kemas kini pangkalan data dengan sewajarnya.
Analisis Interaksi Pangkalan Data
Pilihan antara menggunakan atau meninggalkan .AsNoTracking()
secara langsung memberi kesan kepada interaksi pangkalan data. Dalam kedua-dua senario, pangkalan data diakses dua kali: sekali untuk mengambil pengguna (Langkah 1) dan sekali lagi untuk melakukan kemas kini (Langkah 2). Ini adalah wujud dalam proses, tanpa mengira .AsNoTracking()
.
Penjejakan Entiti dan Pengurusan Negeri
Perbezaan utama terletak pada cara penjejakan entiti dikendalikan. Dengan .AsNoTracking()
, campur tangan manual diperlukan untuk mengurus keadaan objek user
sebelum mengemas kini. Ini melibatkan melampirkan user
pada konteks dan secara eksplisit menetapkan keadaannya kepada "Diubah suai" untuk mengarahkan Rangka Kerja Entiti mengemas kini rekod pangkalan data dan bukannya mencipta yang baharu.
Sebaliknya, apabila .AsNoTracking()
tidak digunakan, sistem penjejakan terbina dalam konteks mengurus keadaan entiti secara automatik, memudahkan proses kemas kini. Pengurusan automatik ini menghapuskan keperluan untuk manipulasi keadaan manual.
Atas ialah kandungan terperinci Bagaimanakah .AsNoTracking() Rangka Kerja Entiti Memberi Impak Interaksi Pangkalan Data dan Penjejakan Entiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!