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

  • 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

    segunda-feira, 14 de outubro de 2013 19:14

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..

    quinta-feira, 24 de outubro de 2013 01:31
  • Você setou a coluna como auto incremento?

    VisitaID INT IDENTITY(1,1)

    segunda-feira, 18 de novembro de 2013 23:41
  • 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(); 

    segunda-feira, 21 de maio de 2018 14:14
  • Antes de inserir, execute o comando:

    SET IDENTITY_INSERT nome_da_tabela ON

     

    Depois de inserido, retorne o autoidentity novamente:

    SET IDENTITY_INSERT nome_da_tabela OFF

    quinta-feira, 3 de janeiro de 2019 15:04