Am eroare de mai jos, atunci când sunt executați următorul script. Ce este eroarea cu privire la, și cum pot fi rezolvate?
Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)
Eroare:
Server: Msg 544, Nivel 16, Stat 1, Linia 1
nu Poate introduce valoare explicită pentru identitatea coloană în tabelul 'masa' când IDENTITY_INSERT este setat la OFF.
Te're introducerea valorilor pentru OperationId` care este o coloană de identitate.
Puteți activa identitate a introduce pe masă, astfel încât să puteți specifica propria identitate valori.
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
Fie foarte precaut de setare IDENTITY_INSERT pentru PE. Aceasta este o practică proastă cu excepția cazului în care baza de date este în modul de întreținere și a stabilit pentru un singur utilizator. Acest lucru afectează nu numai de a introduce, dar cei de oricine încearcă să acceseze masă.
De ce încerci să-și pună în valoare într-o identitate domeniu?
pur și Simplu, Dacă primești această eroare pe SQL server apoi executați această interogare
SET IDENTITY_INSERT tableName ON
acest lucru este de lucru doar o singură masă de databse
e.g Dacă numele tabelului este student atunci interogare arata ca acest SET IDENTITY_INSERT student PE
Dacă primești această eroare pe cererea dvs. de web, sau folosind cadru entitate apoi primul a alerga această interogare în SQL server și Actualizarea modelul entitate (
.edmx
) și de a construi proiect și această eroare va fi rezolvată
In principiu, exista 2 moduri diferite de a INTRODUCE înregistrări, fără a avea o eroare:
atunci Când IDENTITY_INSERT este pornit. CHEIA PRIMARĂ "ID" NU TREBUIE să FIE PREZENT
Când IDENTITY_INSERT este setat PE. CHEIA PRIMARĂ "ID" TREBUIE să FIE PREZENT
Ca pe următorul exemplu din același Tabel creat cu o IDENTITATE CHEIE PRIMARĂ:
CREATE TABLE [dbo].[Persons] (
ID INT IDENTITY(1,1) PRIMARY KEY,
LastName VARCHAR(40) NOT NULL,
FirstName VARCHAR(40)
);
SET IDENTITY_INSERT [dbo].[Persons] OFF;
INSERT INTO [dbo].[Persons] (FirstName,LastName)
VALUES ('JANE','DOE');
INSERT INTO Persons (FirstName,LastName)
VALUES ('JOE','BROWN');
PRODUCȚIA de MASĂ [dbo].[Persoane] va fi:
ID LastName FirstName
1 DOE Jane
2 BROWN JOE
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');
PRODUCȚIA de MASĂ [dbo].[Persoane] va fi:
ID LastName FirstName
1 DOE Jane
2 BROWN JOE
3 BLACK JACK
5 WHITE JOHN
În entitate pentru masa, se adauga DatabaseGenerated
atributul de mai sus coloana pentru care identitatea introduce este setat:
Exemplu:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int TaskId { get; set; }
puteți pur și simplu utiliza Această declarație de exemplu, dacă masa ta numele este Scoala. Înainte de inserție asigurați-vă că identity_insert este setat la LA și după introduceți interogarea întoarce identity_insert OFF
SET IDENTITY_INSERT School ON
/*
insert query
enter code here
*/
SET IDENTITY_INSERT School OFF
Dacă utilizați liquibase pentru a actualiza SQL Server, vă sunt susceptibile de încercarea de a introduce o cheie de înregistrare într-un autoIncrement domeniu. Prin eliminarea coloanei de a introduce, script-ul dvs. ar trebui să ruleze.
<changeSet id="CREATE_GROUP_TABLE" >
<createTable tableName="GROUP_D">
<column name="GROUP_ID" type="INTEGER" autoIncrement="true">
<constraints primaryKey="true"/>
</column>
</createTable>
</changeSet>
<changeSet id="INSERT_UNKNOWN_GROUP" >
<insert tableName="GROUP_D">
<column name="GROUP_ID" valueNumeric="-1"/>
...
</insert>
</changeSet>
Acolo este pre-menționat OperationId în interogare care nu ar trebui să fie acolo ca este auto increamented
Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)
atât de interogare va fi
Insert table(OpDescription,FilterID)
values ('Hierachy Update',1)
O altă situație este de a verifica dacă Cheia Primară este același nume ca cu clase în care singura diferență este că cheia primară a o 'ID' anexată la aceasta, sau pentru a specifica [Cheie] de pe chei primare, care nu sunt legate de modul în care clasa este numit.
Cea mai bună soluție este de a utiliza adnotarea GeneratedValue(strategie = ...)
, adică
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column ...
private int OperationID;
se spune, că această coloană este generat de baza de date folosind IDENTITATEA strategie și don't nevoie pentru a avea grijă de - baza de date se va face.
[DatabaseGenerated(DatabaseGeneratedOption.De identitate)]
în PrimaryKey coloană și asigurați-vă că setul său de la un tip de date int. În cazul în care coloana este o cheie primară și este setat pentru a IsIDentity cu adevărat în SQL nu este nevoie pentru această linie de cod [DatabaseGenerated(DatabaseGeneratedOption.De identitate)]
[DatabaseGenerated(DatabaseGeneratedOption.De identitate)]
Am'm nu sunt sigur ce utilizarea de "Insert Table" este, dar dacă te're doar încercarea de a introduce unele valori încerca:
Insert Into [tablename] (OpDescription,FilterID)
values ('Hierachy Update',1);
Am avut același mesaj de eroare, dar cred că acest lucru ar trebui să funcționeze. ID-ul ar trebui să auto-increment automat atâta timp cât's o cheie primară.
Problema ridicata de utilizarea non-introduce DBContext sau DBSet dacă utilizați Interfața și pune în aplicare metoda de savechanges într-un mod generic
Dacă acesta este cazul tau, eu propun să puternic tastat DBContex de exemplu
MyDBContext.MyEntity.Add(mynewObject)
apoi .Savechanges
va lucra
Pur și simplu ștergeți tabele care sunt târât în dumneavoastră .dbml și re-trageți-le din nou. Apoi Curățați soluție>Reconstrui soluție> Construi soluție.
Asta e ceea ce a lucrat pentru mine.
N-am făcut masa pe cont propriu, am fost folosind VS și SSMS, am urmat acest link pentru ASP.NET Identity:https://docs.microsoft.com/en-us/aspnet/identity/overview/getting-started/adding-aspnet-identity-to-an-empty-or-existing-web-forms-project