Memintas Auto-Kenaikan dalam Rangka Kerja Entiti: Panduan Praktikal
Penjanaan kunci utama automatik Rangka Kerja Entiti boleh menimbulkan masalah apabila anda perlu menetapkan nilai kunci secara manual. Ini selalunya membawa kepada konflik, seperti yang ditunjukkan oleh ralat yang dihadapi semasa cuba mengatasi gelagat autokenaikan.
Pada mulanya, kod berikut digunakan untuk menghalang Rangka Kerja Entiti daripada mengurus kunci utama secara automatik:
<code class="language-csharp">modelBuilder.Entity<event>().Property(e => e.EventID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);</code>
Ini, bagaimanapun, menghasilkan SqlException
: "Tidak boleh memasukkan nilai eksplisit untuk lajur identiti dalam jadual 'Acara' apabila IDENTITY_INSERT ditetapkan kepada MATI." Ini kerana IDENTITY_INSERT
pangkalan data dilumpuhkan, menghalang pemasukan nilai secara langsung ke dalam lajur identiti.
Penyelesaian yang lebih mantap menggunakan atribut DataAnnotations untuk pendekatan yang lebih bersih dan lebih serasi, terutamanya dengan Teras Rangka Kerja Entiti:
<code class="language-csharp">[Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] public int Id { get; set; }</code>
Coretan kod ini mengisytiharkan sifat Id
sebagai kunci utama ([Key]
) dan melumpuhkan penjanaan nilai automatik ([DatabaseGenerated(DatabaseGeneratedOption.None)]
) secara eksplisit. Ini membenarkan penetapan kunci utama manual sambil mengekalkan keserasian dengan Rangka Kerja Entiti. Kaedah ini berkesan mengelakkan isu IDENTITY_INSERT
dan menyediakan penyelesaian yang lebih elegan untuk mengurus kunci utama.
Atas ialah kandungan terperinci Bagaimana untuk Menetapkan Kunci Utama secara Manual dalam Rangka Kerja Entiti Sambil Mengelakkan Ralat `IDENTITY_INSERT`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!