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
Freigeben: 2025-01-15 19:11:42
Original
153 Leute haben es durchsucht

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>
Nach dem Login kopieren

...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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage