Rumah >pangkalan data >tutorial mysql >Mengapa Kekunci Penambahan Auto Rangka Kerja Entiti Walaupun Ditentukan Secara Manual?

Mengapa Kekunci Penambahan Auto Rangka Kerja Entiti Walaupun Ditentukan Secara Manual?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-15 19:11:42208semak imbas

Why Does Entity Framework Auto-Increment Keys Even When Manually Specified?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn