Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk menyelesaikan 'melampirkan entiti gagal disebabkan oleh pendua nilai utama utama' kesilapan dalam ASP.NET MVC?

Bagaimana untuk menyelesaikan 'melampirkan entiti gagal disebabkan oleh pendua nilai utama utama' kesilapan dalam ASP.NET MVC?

Patricia Arquette
Lepaskan: 2025-01-30 08:16:10
asal
1032 orang telah melayarinya

How to Resolve

Penyelesaian masalah pendua ralat utama utama apabila melampirkan entiti di ASP.NET MVC

Dalam aplikasi ASP.NET MVC, cuba melampirkan entiti boleh gagal kerana pelanggaran kekangan utama utama. Ini sering ditunjukkan sebagai mesej ralat yang menunjukkan bahawa entiti dengan kunci utama yang sama sudah ada. Artikel ini memperincikan punca umum dan penyelesaiannya.

Masalahnya sering timbul apabila mengemas kini keadaan entiti untuk

menggunakan EntityState.Modified. Siasatan sering mendedahkan bahawa fungsi berasingan, yang bertanggungjawab untuk kebenaran atau pengambilan data, pra-beban entiti yang sama db.Entry(entity).State = EntityState.Modified sebelum kemas kini negeri. Proses pra-beban ini boleh menyebabkan entiti menjadi terpisah, menyebabkan operasi seterusnya gagal kerana kerangka itu percaya ia cuba menambah pendua. Attach

Penyelesaian ini melibatkan menghalang fungsi pra-beban daripada menjejaki entiti yang dimuatkan. Ini dapat dicapai dengan menggunakan kaedah

dalam pertanyaan rangka entiti. AsNoTracking()

pertimbangkan contoh berikut fungsi

yang bermasalah: canUserAccessA

<code class="language-csharp">// Problematic function - loads and tracks the entity
private bool canUserAccessA(int aID)
{
    int userID = WebSecurity.GetUserId(User.Identity.Name);
    int aFound = db.Model.Where(x => x.aID == aID && x.UserID == userID).Count(); // Tracks the entity

    return (aFound > 0);
}</code>
Salin selepas log masuk
Fungsi ini memuat entiti, menjadikannya dilacak dengan konteksnya. Untuk membetulkannya, ubah fungsi untuk digunakan

: AsNoTracking()

<code class="language-csharp">// Corrected function - loads the entity without tracking
private bool canUserAccessA(int aID)
{
    int userID = WebSecurity.GetUserId(User.Identity.Name);
    int aFound = db.Model.AsNoTracking().Where(x => x.aID == aID && x.UserID == userID).Count();

    return (aFound > 0);
}</code>
Salin selepas log masuk
menggunakan

memastikan bahawa entiti yang dimuatkan tidak dikesan oleh konteks, mencegah konflik dengan operasi AsNoTracking() atau Attach berikutnya. Perhatikan bahawa semasa menggunakan Update dengan .Find(aID) mungkin kelihatan lebih mudah, ia mungkin tidak berkesan bergantung pada pangkalan data dan konfigurasi konteks. Pertanyaan yang disediakan menawarkan pendekatan yang lebih mantap. AsNoTracking

Pengubahsuaian ini berkesan menyelesaikan isu utama utama pendua, memberikan penyelesaian yang boleh dipercayai untuk masalah yang sama dalam pembangunan ASP.NET MVC.

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan 'melampirkan entiti gagal disebabkan oleh pendua nilai utama utama' kesilapan dalam ASP.NET MVC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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