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

Ho l’errore qui sotto quando eseguo il seguente script. Qual è l’errore e come può essere risolto?

Insert table(OperationID,OpDescription,FilterID) values (20,'Hierachy Update',1) 

Errore:

Server: messaggio 544, livello 16, stato 1, riga 1

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

    Stai inserendo valori per OperationId che è una colonna Identity.

    È ansible triggersre l’inserimento di id quadro sulla tabella in questo modo in modo da poter specificare i propri valori di id quadro.

     SET IDENTITY_INSERT Table1 ON INSERT INTO Table1 /*Note the column list is REQUIRED here, not optional*/ (OperationID, OpDescription, FilterID) VALUES (20, 'Hierachy Update', 1) SET IDENTITY_INSERT Table1 OFF 

    non mettere valore a OperationID perché verrà generato automaticamente. prova questo:

     Insert table(OpDescription,FilterID) values ('Hierachy Update',1) 

    Fai molta attenzione a impostare IDENTITY_INSERT su ON. Questa è una pratica scarsa a meno che il database non sia in modalità di manutenzione e impostato su utente singolo. Ciò riguarda non solo il tuo inserto, ma anche quelli di chiunque altro provi ad accedere al tavolo.

    Perché stai cercando di mettere un valore in un campo di identity framework?

    Semplicemente se ottieni questo errore sul server SQL, esegui questa query-

     SET IDENTITY_INSERT tableName ON 

    Ad esempio, se il nome della tabella è uno studente, la query appare come questo SET IDENTITY_INSERT student ON

    Se si verifica questo errore nell’applicazione Web o si utilizza il framework quadro, eseguire prima questa query sul server SQL e aggiornare il modello dell’ quadro ( .edmx file ) e creare il progetto e questo errore verrà risolto

    Nella tua quadro per quella tabella, aggiungi l’attributo DatabaseGenerated sopra la colonna per cui è impostato l’inserimento dell’identity framework:

    Esempio:

     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int TaskId { get; set; } 

    Se si sta utilizzando liquibase per aggiornare SQL Server, è probabile che si stia tentando di inserire una chiave di registrazione in un campo autoIncrement. Rimuovendo la colonna dall’inserto, lo script dovrebbe essere eseguito.

               ...   

    Nella tua query c’è OperationId già menzionato che non dovrebbe essere presente poiché è auto-potenziato

     Insert table(OperationID,OpDescription,FilterID) values (20,'Hierachy Update',1) 

    quindi la tua domanda sarà

     Insert table(OpDescription,FilterID) values ('Hierachy Update',1) 

    puoi semplicemente usare questa affermazione per esempio se il tuo nome di tabella è School . Prima dell’inserimento assicurarsi che identity_insert sia impostato su ON e dopo la query di inserimento distriggersre identity_insert OFF

     SET IDENTITY_INSERT School ON /* insert query enter code here */ SET IDENTITY_INSERT School OFF 

    Beh, ho risolto il problema con la mia semplice chiave, Controlla che la tua chiave primaria abbia lo stesso nome delle tue classi, dove l’unica differenza è che la tua chiave primaria ha l’ID aggiunto o specifica [Chiave] sulle chiavi primarie che non sono correlate a come la class è nominata.

    Esistono fondamentalmente 2 modi diversi per INSERIRE i record senza avere un errore:

    1) Quando IDENTITY_INSERT è impostato su OFF. L’ ID “ PRIMARY KEY ” NON DEVE ESSERE PRESENTE

    2) Quando IDENTITY_INSERT è impostato su ON. L’ ID “ PRIMARY KEY ” DEVE ESSERE PRESENTE

    Come nell’esempio seguente della stessa tabella creata con una CHIAVE PRIMARIA DI IDENTITÀ:

     CREATE TABLE [dbo].[Persons] ( ID INT IDENTITY(1,1) PRIMARY KEY, LastName VARCHAR(40) NOT NULL, FirstName VARCHAR(40) ); 

    1) Nel primo esempio, puoi inserire nuovi record nella tabella senza ottenere un errore quando IDENTITY_INSERT è OFF. L’ ID “ PRIMARY KEY ” NON DEVE ESSERE PRESENTE dalle dichiarazioni “INSERT INTO” e un valore ID univoco verrà aggiunto automaticamente:. Se l’ID è presente dall’INSERT in questo caso, verrà visualizzato l’errore “Imansible inserire il valore esplicito per identificare la colonna nella tabella …”

     SET IDENTITY_INSERT [dbo].[Persons] OFF; INSERT INTO [dbo].[Persons] (FirstName,LastName) VALUES ('JANE','DOE'); INSERT INTO Persons (FirstName,LastName) VALUES ('JOE','BROWN'); 

    OUTPUT di TABLE [dbo]. [Persons] sarà:

     ID LastName FirstName 1 DOE Jane 2 BROWN JOE 

    2) Nel secondo esempio, puoi inserire nuovi record nella tabella senza ottenere un errore quando IDENTITY_INSERT è ON. L’ ID “ PRIMARY KEY ” DEVE ESSERE PRESENTE dalle istruzioni “INSERT INTO” purché il valore ID non esista già : se l’ID NON è presente dall’INSERT in questo caso, si otterrà l’errore “Il valore esplicito deve essere specificato per la tabella delle colonne Identity … ”

     SET IDENTITY_INSERT [dbo].[Persons] ON; INSERT INTO [dbo].[Persons] (ID,FirstName,LastName) VALUES (5,'JOHN','WHITE'); INSERT INTO [dbo].[Persons] (ID,FirstName,LastName) VALUES (3,'JACK','BLACK'); 

    OUTPUT di TABLE [dbo]. [Persons] sarà:

     ID LastName FirstName 1 DOE Jane 2 BROWN JOE 3 BLACK JACK 5 WHITE JOHN 

    E se stai usando Oracle SQL Developer per connetterti, ricorda di aggiungere / sqldev: stmt /

    / sqldev: stmt / set identity_insert TABLE on;

    Non sono sicuro di cosa sia l’uso per “Inserisci tabella”, ma se stai solo provando ad inserire alcuni valori prova:

     Insert Into [tablename] (OpDescription,FilterID) values ('Hierachy Update',1); 

    Ho avuto lo stesso messaggio di errore, ma penso che questo dovrebbe funzionare. L’ID deve automaticamente incrementare automaticamente finché è una chiave primaria.

    Il problema sollevato dall’utilizzo di DBContext o DBSet non digitati se si utilizza l’interfaccia e si implementa il metodo dei savechanges in modo generico

    Se questo è il tuo caso, propongo di scrivere DBContex fortemente scritto, ad esempio

     MyDBContext.MyEntity.Add(mynewObject) 

    quindi. .Savechanges funzionamenti funzioneranno