Mein Modell sieht folgendermaßen aus:
public class AliveCheckedRealestate
{
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[Key, Column(Order = 0)]
public int RealestateId { get; set; }
[Key, Column(Order = 1)]
[ForeignKey("Job")]
public int JobId { get; set; }
public virtual AliveCheckJob Job { get; set; }
}
Immer wenn ich einen neuen AliveCheckedRealestate zum Kontext hinzufüge, mache ich folgendes:
job.AliveCheckedRealestates.Add(new AliveCheckedRealestate(){RealestateId = 33});
(Job ist ein vorheriger Job in der Datenbank)
Jedes Mal, wenn ich versuche, die Änderungen zu speichern (also das neue AliveCheckedRealestate), erhalte ich die folgende Ausnahme:
Der explizite Wert für die Identitätsspalte kann in der Tabelle 'AliveCheckedRealestates' nicht eingefügt werden, wenn IDENTITY_INSERT auf OFF gesetzt ist.
Was könnte das Problem hier sein? RealestateId ist ein eindeutiger Integer, den ich manuell gesetzt habe (es ist kein Fremdschlüssel) und ich setze es.
Sie müssen den folgenden SQL-Befehl für die Tabelle ausführen:
SET IDENTITY_INSERT Tabellenname ON;
Ich kenne keine eingebaute Methode, EF zu sagen, dass er die Identität einfügen soll. Soweit ich weiß, besteht die einzige Möglichkeit darin, dies mit SQL zu tun.
HINWEIS: Keine gute Praxis, überhaupt nicht empfohlen. Sie können sehr wohl doppelte Werte haben, also lassen Sie die Identity-Spalte die Werte für Sie generieren. Wenn Sie die Werte selbst einfügen möchten, machen Sie sie nicht zu einer Identitätsspalte.
In der Kontextklasse Ihres Entityframeworks gibt es eine Option namens ValueGeneratedNever, die für die Identität festgelegt, entfernt und verwendet wird
entity.HasKey(e => e.Id);
entity.ToTable("NameofYourtable");
// auch verwenden
yourContext.Database.ExecuteSqlCommand("SET IDENTITY_INSERT dbo.YourTableName ON");
yourContext.SaveChanges();
yourContext.YourTableFromDB.Add(YourParameterCommingin);
yourContext.SaveChanges();`
Lassen Sie mich wissen, ob dies geholfen hat