Rumah >pembangunan bahagian belakang >C++ >ASP.NET MVC: Bagaimana menyelesaikan kesilapan 'melampirkan entiti gagal' kerana kekunci utama pendua?
menyelesaikan kesilapan "entiti tambahan" yang disebabkan oleh konflik utama utama dalam ASP.NET MVC
Dalam ASP.NET MVC, apabila model penyuntingan dikemas kini kepada "diubah suai", ralat mungkin ditemui: "Entiti dengan jenis tambahan 'ModelName' gagal nilai utama utama yang sama". Kesalahan ini berlaku apabila entiti dikemas kini wujud dalam pendaftaran penjejakan yang wujud dalam konteksnya.
Dalam senario yang diberikan, kesilapan dibuang dalam perjalanan berikut:
Analisis ralat:
<code class="language-csharp">db.Entry(aViewModel.a).State = EntityState.Modified;</code>
Masalahnya datang dari edit edit (get)
Pengawal, yang memuat entiti yang akan diedit. Dalam operasi ini, kaedah CanUserAccessacuba mengesahkan akses pengguna oleh entiti pemuatan bebas. Sejak itu, entiti diletakkan dalam keadaan pemisahan. Penyelesaian:
Untuk menyelesaikan konflik, kaedahCanuserAccessa mesti diubah suai untuk memastikan bahawa entiti tidak dikesan dalam konteks pertanyaan. Ini boleh dicapai dengan memanggil kaedah , seperti yang ditunjukkan di bawah:
Penjelasan:
.AsNoTracking()
Dengan menggunakan , entiti tidak akan dikesan oleh konteks apabila memuatkan. Ini menghalang kemas kini berikutnya daripada bertentangan dengan keadaan pemisahan.
<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); //如果 aFound > 0,则返回 true,否则返回 false。 }</code>Kesimpulan:
Ralat "Kegagalan entiti jenis tambahan adalah 'ModelName' ..." mungkin berlaku apabila entiti dikemas kini telah dikesan oleh konteksnya. Untuk menyelesaikan konflik ini, adalah perlu untuk memastikan bahawa mana -mana entiti pemuatan bebas dilumpuhkan dan menjejaki, seperti kaedah
CanUserAccessa yang diubahsuai. .AsNoTracking()
Atas ialah kandungan terperinci ASP.NET MVC: Bagaimana menyelesaikan kesilapan 'melampirkan entiti gagal' kerana kekunci utama pendua?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!