Errore Entity Framework: imansible inserire il valore esplicito per la colonna Identity nella tabella

Sto ottenendo questo errore su EF.

Imansible inserire il valore esplicito per la colonna Identity nella tabella ‘GroupMembers_New’ quando IDENTITY_INSERT è impostato su OFF.

La colonna sul Db è l’incremento dell’id quadro e sul file di progettazione EF, StoreGeneratedPattern è anche l’ identity . Sembra che EF stia cercando di inserire 0 ogni volta che provo a salvare.

Alcuni suggerimenti dicono che l’ID è riservato su tabelle o rilasciare la tabella e rieseguire gli script.

Qualche idea?

Ecco un codice:

 GroupMember groupMember = new GroupMember(); groupMember.GroupId = group.Id; groupMember.UserId = (new UserId(group.Owner)); //groupMember.Id = _groupContext.GroupMembers.Count(); group.GroupMembers.Add(groupMember); _groupContext.SaveChanges(); 

Banca dati

Designer EF

Mi sono imbattuto in questo prima. Questo errore significa che stai tentando di assegnare un valore esplicitamente a una colonna in cui il database lo assegna automaticamente.

Suggerimento: aggiornare il file edmx in modo che rifletta le eventuali modifiche apportate al database. Se il database assegna automaticamente il valore, dovresti vedere l’attributo “IsDbGenerated = true” nel tuo file designer sotto quella proprietà. Se non è lì, puoi aggiungerlo manualmente.

Prova questo:

 using System.ComponentModel.DataAnnotations.Schema; [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public decimal Identity_Col { get; set; } 

Il file di class Entity Framework aggiunge queste righe di codice alla colonna Identity.

Metti questi attributi in cima alla proprietà che è l’id quadro:

 [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int ID { get; set; } 

Prima partita in google, ecco la mia soluzione qui:

Primo codice EF: a causa di un campo “id” PK autoinc E una colonna guid, design come questo:

 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Guid FileToken { get; set; } 

c’era un’id quadro duplicata. L’ho cambiato in:

 [DatabaseGenerated(DatabaseGeneratedOption.Computed)] [DefaultValue("newid()")] public Guid FileToken { get; set; } 

e il problema è andato via.

Spero che ti aiuti.

Erik

In EF 6, esiste una proprietà del campo / colonna nel modello per fare ciò: StoreGeneratedPattern.

Impostare questo su “Identity framework” nell’elenco a discesa delle proprietà.

(Non so EF 4. La risposta di cui sopra, utilizzando IsDbGenerated, sembra essere per EF 4.)

E questo corrisponde all’XML sottostante ad un attributo all’elemento:

  

– ma non è necessario gestire manualmente l’XML, poiché è ansible utilizzare il designer.

Non è chiaro come questo venga incasinato. Ho avuto il problema anche dopo aver aggiornato il mio modello dal database. Forse viene confuso se si imposta il PK sul tavolo o si cambia nome, dopo aver già generato il modello. (Sto usando l’approccio table / database-first, non il codice prima.)

Non è ansible utilizzare l’approccio sopra riportato per inserire l’attributo C # sul codice entity framework, poiché in questa situazione il codice quadro viene generato da EF. EF dovrebbe capire (“da solo”) che il campo è un’id quadro.

Ho avuto questo problema nella mia app; e si è risolto modificando la proprietà “StoredGeneratedPattern” del campo id su Identity.

Quindi, vai al modello; cercare il tavolo; fare clic sulle proprietà del campo chiave principale; e cambiare la proprietà.