Heim >Datenbank >MySQL-Tutorial >Warum erhöht Entity Framework Schlüssel automatisch, auch wenn sie manuell angegeben werden?

Warum erhöht Entity Framework Schlüssel automatisch, auch wenn sie manuell angegeben werden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-15 19:11:42154Durchsuche

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

Entity Framework und manuell zugewiesene Schlüssel: Ein Leitfaden zur Fehlerbehebung

Eine häufige Herausforderung bei der Verwendung des Code-First-Ansatzes von Entity Framework ist die Tendenz des Frameworks, Schlüssel automatisch zu erhöhen, selbst wenn Schlüssel manuell zugewiesen werden. Dieser Artikel beschreibt eine Lösung und mögliche Fallstricke.

Ein Entwickler ist kürzlich auf dieses Problem gestoßen. Trotz der expliziten Festlegung von Schlüsselwerten setzte Entity Framework die automatische Inkrementierung fort. Die typische Lösung mit HasDatabaseGeneratedOption(DatabaseGeneratedOption.None):

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

...führte zu folgendem Fehler:

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

Dieser Fehler tritt auf, weil IDENTITY_INSERT für die Tabelle „Ereignisse“ auf AUS gesetzt wurde. Um dieses Problem zu beheben, muss IDENTITY_INSERT explizit auf EIN gesetzt werden, bevor Daten mit manuell angegebenen Schlüsseln eingefügt werden. Dadurch kann die Datenbank die vorab zugewiesenen Schlüsselwerte akzeptieren.

Alternativ können Attribute das gleiche Ergebnis erzielen:

<code class="language-csharp">[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int EventID { get; set; }</code>

Dieser Ansatz funktioniert sowohl im Entity Framework als auch im Entity Framework Core. Der Schlüssel besteht darin, die IDENTITY_INSERT-Einstellung der Datenbank korrekt zu verwalten, um Konflikte bei der manuellen Zuweisung von Primärschlüsselwerten zu vermeiden. Denken Sie daran, es nach Abschluss des Einfügens wieder auf AUS zu setzen, um das Standardverhalten der Datenbank zu gewährleisten.

Das obige ist der detaillierte Inhalt vonWarum erhöht Entity Framework Schlüssel automatisch, auch wenn sie manuell angegeben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn