Inquiridor
Não é possível inserir um valor explícito para a coluna de identidade na tabela 'Visitas' quando IDENTITY_INSERT está definido como OFF.

Pergunta
-
Olá, estou fazendo um sistema usando varias tabelas e o dynamic data + EF.
Estava tudo fluindo bem com várias tabelas, quando de repente precisei criar uma nova tabela, e ao tentar inserir um registro nela, dá um erro:
Não é possível inserir um valor explícito para a coluna de identidade na tabela 'Visitas' quando IDENTITY_INSERT está definido como OFF.
Acontece que eu NÃO estou tentando inserir o campo identidade, eu queria que o SQL gerasse sozinho, assim como funciona normalmente com outras tabelas. Segue abaixo o código do trecho que salva o registro:
protected void salvarOS_bt_Click(object sender, EventArgs e) { using (IBFTEC10Entities11 contexto2 = new IBFTEC10Entities11()) { Visitas visita = new Visitas(); try { visita.Data = Convert.ToDateTime(txtStartDate.Text); } catch (Exception es) { visita.Data = DateTime.Now; } if (OSIDlabel.Visible == true) visita.OSID = Convert.ToInt32(Convert.ToInt32(OSIDlabel.Text)); else { if (osid_textbox.Text != "") visita.OSID = Convert.ToInt32(osid_textbox.Text); else osid_validator.Validate(); } try { visita.TipoID = Convert.ToInt32(DropDownList5.SelectedValue); } catch (Exception rt) { RequiredFieldValidator7.Validate(); } contexto2.AddToVisitas(visita); contexto2.SaveChanges(); } }
o campo chave é o campo VisitaID, o qual eu não estou tentando inserir, então, onde está o erro?
ps. na mesma página eu faço outro acesso pra pegar o "nextval" (próximo valor da identidade que será gerada), só pra exibir na tela para o usuário. Será que de alguma forma esse número acabou ficando "travado" no sql?
Grato desde já!!
Anderson
Todas as Respostas
-
ola pessoal ainda nao consegui.. :(
se eu tirar o relacionamento, tanto no banco como no EF, e habilitar identity insert, eu consigo fazer a inserção, mas isso vai afetar as visualização de outras telas pois estou usando dynamic data...
tudo que eu preciso é inserir o registro na tabela, e a PK pode ser gerada sequencialmente pelo SQL, mas isso fica dando erro, como se eu estivesse tentando inserir a PK quando não estou... isso so acontece quando essa PK faz parte do relacionamento..
-
Você setou a coluna como auto incremento?
VisitaID INT IDENTITY(1,1)
- Sugerido como Resposta Cesar Cassiano Schimanco quinta-feira, 21 de novembro de 2013 01:52
-
Sei que a pergunta é antiga, mas me deparei com o mesmo problema e não encontrei solução em Português. O problema está que o EF não sabe que seu ID é um Identity(1,1). No meu caso quando utilizei Code First para crias minhas classes do Entity Framework ele não colocou o atributo que demonstrava que a ID era um campo auto populado pelo sql.
Solução: colocar o atributo para a propriedade ID manualmente
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ID { get; set;}
Aqui resolveu, e pude salvar novos registros com _context.SaveChanges();
-