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
dalam pertanyaan rangka entiti. AsNoTracking()
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>
: 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>
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
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!