Heim >Backend-Entwicklung >C++ >Wie kann verhindert werden, dass Entity Framework automatisch Primärschlüssel generiert?
Unterdrückung der automatischen Primärschlüsselgenerierung im Entity Framework
Der Code-First-Ansatz von Entity Framework generiert häufig automatisch Primärschlüssel, insbesondere automatisch inkrementierende Identitätsspalten. Dieses automatische Verhalten ist nicht immer geeignet. In diesem Artikel wird beschrieben, wie Sie diese Standardfunktionalität überschreiben können.
Ein gängiger Ansatz verwendet eine fließende API-Konfiguration:
<code class="language-csharp">modelBuilder.Entity<Event>().Property(e => e.EventID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);</code>
Dies kann jedoch zu folgendem Fehler führen: „Der explizite Wert für die Identitätsspalte in der Tabelle ‚Ereignisse‘ kann nicht eingefügt werden, wenn IDENTITY_INSERT auf OFF gesetzt ist.“
Den Fehler verstehen
Dieser Fehler entsteht durch einen Konflikt. DatabaseGeneratedOption.None
verhindert, dass EF IDs generiert, aber die Datenbanktabelle verfügt weiterhin über die Eigenschaft IDENTITY
, was zu einem Konflikt führt, wenn versucht wird, Schlüsselwerte manuell zuzuweisen.
Auflösung
Die Lösung besteht darin, die Eigenschaft IDENTITY
für die ID-Spalte in der Datenbank zu deaktivieren. Verwenden Sie diesen SQL-Befehl:
<code class="language-sql">ALTER TABLE Events ALTER COLUMN EventID INT NOT NULL</code>
Attributbasierte Alternative
Alternativ können Sie Attribute direkt innerhalb Ihrer Entitätsklasse verwenden:
<code class="language-csharp">[Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] public int EventID { get; set; }</code>
Diese Methode funktioniert auch korrekt mit EF Core.
Durch die Implementierung dieser Lösungen erhalten Entwickler Kontrolle über die Zuweisung von Primärschlüsseln, geben Werte manuell an und umgehen die standardmäßige automatische Generierung von EF.
Das obige ist der detaillierte Inhalt vonWie kann verhindert werden, dass Entity Framework automatisch Primärschlüssel generiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!