Requisitos: Ao usar o Dapper.Contrib para executar o método Insert, o valor de retorno de um único dado inserido para o campo da chave primária auto-incrementante é o valor após a inserção, e quando o valor de retorno for maior que 2147483647, o Dapper.Contrib lançará a exceção "O valor é grande demais ou pequeno demais para Int32".
Ao usar o Dapper.Contrib para inserir dados, aparece o erro "O valor é grande demais ou pequeno demais para Int32", e o banco de dados foi inserido com sucesso! suspeitava que era um problema com o framework ORM, então pesquisei no GitHub e descobri que era um problema conhecido,A equipe da Dapper não corrigiu porque teme que seja muito impactante, e outros autores forneceram relações públicas para a Dapper, mas também foi fechada, como mostrado na figura abaixo:
O login do hiperlink está visível.
A razão para a exceção é que, após obter o auto-valor adicionado, tomando o adaptador SQL Server como exemplo, o cast é convertido em um erro do tipo int, e o valor máximo de int é (int. MaxValue): 2147483647, como mostrado na figura abaixo:
Para reproduzir o método, crie uma nova tabela, adicione a chave primária começando a partir de 2147483648, e o script SQL é o seguinte:
Referenciando o pacote Dapper.Contrib, execute a operação de inserção com o seguinte código:
O erro é o seguinte:
solução
Substitua Dapper.Contrib pelo pacote Dapper.Contrib.Unofficial pelo seguinte comando:
O teste não apresenta mais erro, como mostrado na figura a seguir:
Dica: Dapper.Contrib.Unofficial não está totalmente testado, por favor, teste você mesmo antes de usar!
(Fim)
|