首頁 >資料庫 >mysql教程 >為什麼即使手動指定,實體框架也會自動遞增鍵?

為什麼即使手動指定,實體框架也會自動遞增鍵?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-15 19:11:42156瀏覽

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

實體框架和手動分配的鍵:故障排除指南

使用實體框架的程式碼優先方法時的一個常見挑戰是框架傾向於自動遞增鍵,即使鍵是手動分配的。 本文詳細介紹了解決方案及其潛在陷阱。

一位開發者最近遇到了這個問題。 儘管明確設定鍵值,實體框架仍繼續自動遞增。 典型的解決方案,使用 HasDatabaseGeneratedOption(DatabaseGeneratedOption.None):

<code class="language-csharp">modelBuilder.Entity<event>().Property(e => e.EventID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);</code>

...導致以下錯誤:

<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>

出現此錯誤的原因是「事件」表的 IDENTITY_INSERT 設定為 OFF。 要解決此問題,在使用手動指定的鍵插入資料之前,必須將 IDENTITY_INSERT 明確設定為 ON 。 這允許資料庫接受預先分配的鍵值。

或者,屬性也可以達到相同的結果:

<code class="language-csharp">[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int EventID { get; set; }</code>
此方法在 Entity Framework 和 Entity Framework Core 中皆有效。 關鍵是要正確管理資料庫的

設置,以避免手動分配主鍵值時發生衝突。 請記住在插入完成後將其設定回 OFF 以實現標準資料庫行為。 IDENTITY_INSERT

以上是為什麼即使手動指定,實體框架也會自動遞增鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn