Rangka Kerja Entiti dan Kunci Diberikan Secara Manual: Panduan Penyelesaian Masalah
Cabaran biasa apabila menggunakan pendekatan pertama kod Rangka Kerja Entiti melibatkan kecenderungan rangka kerja untuk menambah kunci secara automatik, walaupun apabila kunci diberikan secara manual. Artikel ini memperincikan penyelesaian dan kemungkinan perangkapnya.
Seorang pembangun baru-baru ini menghadapi isu ini. Walaupun secara eksplisit menetapkan nilai utama, Rangka Kerja Entiti terus meningkat secara automatik. Penyelesaian biasa, menggunakan HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)
:
<code class="language-csharp">modelBuilder.Entity<event>().Property(e => e.EventID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);</code>
...mengakibatkan ralat berikut:
<code>Unhandled Exception: System.Data.Entity.Infrastructure.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. --- System.Data.UpdateException: An error occurred while updating the entries. See the inner exception for details. ---> System.Data.SqlClient.SqlException: Cannot insert explicit value for identity column in table 'Events' when IDENTITY_INSERT is set to OFF.</code>
Ralat ini timbul kerana IDENTITY_INSERT
untuk jadual 'Acara' telah ditetapkan kepada MATI. Untuk menyelesaikan masalah ini, IDENTITY_INSERT
mesti ditetapkan secara eksplisit kepada HIDUP sebelum memasukkan data dengan kunci yang ditentukan secara manual. Ini membolehkan pangkalan data menerima nilai kunci yang telah ditetapkan sebelumnya.
Sebagai alternatif, atribut boleh mencapai hasil yang sama:
<code class="language-csharp">[Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] public int EventID { get; set; }</code>
Pendekatan ini berfungsi dalam Rangka Kerja Entiti dan Teras Rangka Kerja Entiti. Kuncinya ialah untuk mengurus tetapan IDENTITY_INSERT
pangkalan data dengan betul untuk mengelakkan konflik apabila memberikan nilai kunci primer secara manual. Ingat untuk menetapkannya kembali kepada MATI selepas sisipan anda selesai untuk tingkah laku pangkalan data standard.
Atas ialah kandungan terperinci Mengapa Kekunci Penambahan Auto Rangka Kerja Entiti Walaupun Ditentukan Secara Manual?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!