Il mio modello sembra il seguente:
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; }
}
Ogni volta che aggiungo un nuovo AliveCheckedRealestate al contesto, faccio quanto segue:
job.AliveCheckedRealestates.Add(new AliveCheckedRealestate(){RealestateId = 33});
(Il lavoro è un lavoro preesistente nel database)
Tuttavia, ogni volta che provo a salvare le modifiche (ovvero, il nuovo AliveCheckedRealestate), ottengo la seguente eccezione:
Impossibile inserire il valore esplicito per la colonna Identity nella tabella "AliveCheckedRealestates" quando IDENTITY_INSERT è impostato su OFF.
Quale potrebbe essere il problema qui? RealestateId è un numero intero univoco che imposto manualmente (non è una chiave estranea) e che lo imposto.
Dovrai eseguire il seguente comando sql sulla tabella:
SET IDENTITY_INSERT Table_Name ON;
Non conosco alcun modo integrato di dire a EF di inserire l'inserimento di identità, per quanto ne so l'unico modo è farlo con SQL.
NOTA: non è una buona pratica, non consigliato affatto. Potresti finire per avere valori duplicati, quindi lascia che la colonna Identity generi i valori per te. se vuoi essere in grado di inserire tu stesso i valori, non rendi affatto una colonna Identity.
C'è un'opzione nella classe di contesto del tuo framework di entità chiamata ValueGeneratedNever impostata sull'identità, rimuoverla e utilizzare
entity.HasKey(e => e.Id);
entity.ToTable("NameofYourtable");
// usa anche
yourContext.Database.ExecuteSqlCommand("SET IDENTITY_INSERT dbo.YourTableName ON");
yourContext.SaveChanges();
yourContext.YourTableFromDB.Add(YourParameterCommingin);
yourContext.SaveChanges();`
Fammi sapere se ti è stato d'aiuto