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
Lepaskan: 2025-01-15 19:11:42
asal
153 orang telah melayarinya

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>
Salin selepas log masuk

...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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan