Penyelesaian masalah entiti utama konflik dalam kemas kini entiti ASP.NET MVC
Apabila mengemas kini entiti di ASP.NET MVC melalui permintaan pos, anda mungkin menghadapi ralat berikut:
<code>Attaching an entity of type 'MODELNAME' failed because another entity of the same type already has the same primary key value.</code>
manakala entiti lain dengan kunci utama yang sama sudah ada dalam graf objek konteks. DbContext
cuba menggabungkan entiti, mengakibatkan konflik. DbContext
senario dan punca akar
Bayangkan mengedit entiti 'A' dalam pengawal. Get Action menggunakan untuk memuatkan entiti. Tindakan pos kemudian cuba melampirkan dan mengemas kini. Walau bagaimanapun, jika entiti 'A' yang lain dengan kunci utama yang sama dimuatkan di tempat lain (mis., Semasa pengesahan akses pengguna), ini mewujudkan konflik penjejakan. Find()
Resolusi Menggunakan AsNoTracking()
Penyelesaian yang paling berkesan adalah untuk mencegah DBContext daripada menjejaki entiti yang digunakan untuk pengesahan. Gunakan kaedah
AsNoTracking()
<code class="language-csharp">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>
AsNoTracking()
Detach()
Pendekatan lain melibatkan melanggar entiti dari
. Ini menghalang konflik pengesanan. Walau bagaimanapun, sedar bahawa pemisahan mungkin memberi kesan kepada bahagian lain kod anda, dengan teliti mempertimbangkan implikasinya sebelum melaksanakan penyelesaian ini. DbContext
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan konflik utama entiti semasa mengedit entiti di ASP.NET MVC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!