none
Entity Framework tem identity? RRS feed

  • Pergunta

  • Prezados,

    Tenho uma Web API que realiza cadastros, porém, o campo ID não aumenta sozinho e da erro na hora de cadastrar novas pessoas, exemplo:

    via POSTMAN eu faço o comando de POST e o visual studio aponta erro: '. Cannot insert duplicate key in object '. The duplicate key value entity framework...' então o ID não está sendo auto increment...

    via SQL SERVER eu realizo o insert sem o campo ID e o insert é realizado sem problemas.

    Alguém poderia me ajudar com essa duvida?


    terça-feira, 5 de fevereiro de 2019 17:56

Respostas

  • Olá, bom dia..

    Você está usando herança TPC (Tabela por tipo concreto) para a criação das tabelas ?   Eu creio que o EF (dependendo da versão), não aceita Identity para este tipo de herança..

    Veja este link abaixo:

    https://stackoverflow.com/questions/5449724/entity-framework-code-first-cannot-insert-duplicate-key-in-object-db

    Aguardo retorno

    Abs

    • Marcado como Resposta Douglas Souza05 quarta-feira, 6 de fevereiro de 2019 17:58
    quarta-feira, 6 de fevereiro de 2019 13:25

Todas as Respostas

  • Olá, bom dia..

    Você está usando herança TPC (Tabela por tipo concreto) para a criação das tabelas ?   Eu creio que o EF (dependendo da versão), não aceita Identity para este tipo de herança..

    Veja este link abaixo:

    https://stackoverflow.com/questions/5449724/entity-framework-code-first-cannot-insert-duplicate-key-in-object-db

    Aguardo retorno

    Abs

    • Marcado como Resposta Douglas Souza05 quarta-feira, 6 de fevereiro de 2019 17:58
    quarta-feira, 6 de fevereiro de 2019 13:25
  • Olá, 

    Tentei de todas as formas mas acabei não conseguindo, fiz da seguinte forma para resolver a situação(não aconselho porém funciona):

    Criei um método que pega o ultimo id inserido na tabela e uma variavel que pega esse resultado:

     string connetionString = null;
                string sql = null;
                connetionString = "Data Source=.....;Initial Catalog=....; Trusted_Connection=True;";
                using (SqlConnection cnn = new SqlConnection(connetionString))
                {
                    sql = "select MAX(Docentry) from BRWAPIORequest";
                    cnn.Open();
                    using (SqlCommand cmd = new SqlCommand(sql, cnn))
                    {
                        
                        Int32 sql_max = Convert.ToInt32(cmd.ExecuteScalar());
                        num = sql_max;
    
                    }
    
                }

    feito isso utilizei essa variavel +1 no comando sql do método POST

    "insert into BRWAPIORequest (DocEntry, DocDate)  values("+num+" +1,@last)";

    e funcionou.

    quarta-feira, 6 de fevereiro de 2019 17:11
  • Olá, 

    Tentei de todas as formas mas acabei não conseguindo, fiz da seguinte forma para resolver a situação(não aconselho porém funciona):

    Criei um método que pega o ultimo id inserido na tabela e uma variavel que pega esse resultado:

     string connetionString = null;
                string sql = null;
                connetionString = "Data Source=.....;Initial Catalog=....; Trusted_Connection=True;";
                using (SqlConnection cnn = new SqlConnection(connetionString))
                {
                    sql = "select MAX(Docentry) from BRWAPIORequest";
                    cnn.Open();
                    using (SqlCommand cmd = new SqlCommand(sql, cnn))
                    {
                        
                        Int32 sql_max = Convert.ToInt32(cmd.ExecuteScalar());
                        num = sql_max;
    
                    }
    
                }

    feito isso utilizei essa variavel +1 no comando sql do método POST

    "insert into BRWAPIORequest (DocEntry, DocDate)  values("+num+" +1,@last)";

    e funcionou.

    Bem, então, você desligou o IDENTITY ??

    quarta-feira, 6 de fevereiro de 2019 17:28
  • Exatamente, desliguei o identity e fiz na mão.
    quarta-feira, 6 de fevereiro de 2019 17:31
  • Espero ter ajudado na sua solução.

    Abs

    quarta-feira, 6 de fevereiro de 2019 17:42