Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menghalang Rangka Kerja Entiti daripada Menjana Kunci Utama Secara Automatik?
Menindas Penjanaan Kunci Utama Automatik dalam Rangka Kerja Entiti
Pendekatan pertama kod Rangka Kerja Entiti selalunya menjana kunci utama secara automatik, khususnya lajur identiti yang meningkat secara automatik. Tingkah laku automatik ini tidak selalunya sesuai. Artikel ini menggariskan cara untuk mengatasi kefungsian lalai ini.
Satu pendekatan biasa menggunakan konfigurasi API yang fasih:
<code class="language-csharp">modelBuilder.Entity<Event>().Property(e => e.EventID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);</code>
Walau bagaimanapun, ini boleh membawa kepada ralat: "Tidak boleh memasukkan nilai eksplisit untuk lajur identiti dalam jadual 'Acara' apabila IDENTITY_INSERT ditetapkan kepada MATI."
Memahami Ralat
Ralat ini timbul daripada konflik. DatabaseGeneratedOption.None
menghalang EF daripada menjana ID, tetapi jadual pangkalan data masih mempunyai sifat IDENTITY
, mewujudkan pertembungan apabila cuba menetapkan nilai kunci secara manual.
Penyelesaian
Penyelesaian melibatkan melumpuhkan sifat IDENTITY
pada lajur ID dalam pangkalan data. Gunakan arahan SQL ini:
<code class="language-sql">ALTER TABLE Events ALTER COLUMN EventID INT NOT NULL</code>
Alternatif Berasaskan Atribut
Sebagai alternatif, anda boleh menggunakan atribut terus dalam kelas entiti anda:
<code class="language-csharp">[Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] public int EventID { get; set; }</code>
Kaedah ini juga berfungsi dengan betul dengan Teras EF.
Dengan melaksanakan penyelesaian ini, pembangun memperoleh kawalan ke atas penetapan kunci utama, menentukan nilai secara manual dan memintas penjanaan automatik lalai EF.
Atas ialah kandungan terperinci Bagaimana untuk Menghalang Rangka Kerja Entiti daripada Menjana Kunci Utama Secara Automatik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!