Requisitos: Al usar Dapper.Contrib para ejecutar el método Insert, el valor de retorno de un solo dato insertado para el campo de clave primaria auto-incrementante es el valor posterior a la inserción, y cuando el valor de retorno es mayor que 2147483647, Dapper.Contrib lanzará la excepción "El valor es demasiado grande o demasiado pequeño para Int32".
Al usar Dapper.Contrib para insertar datos, aparece el error "El valor es demasiado grande o demasiado pequeño para Int32", ¡y la base de datos ha sido insertada con éxito! sospechaba que era un problema con el framework ORM, luego busqué en GitHub y vi que era un problema conocido,El equipo de Dapper no lo ha solucionado porque teme que tenga un impacto excesivo, y otros autores han proporcionado relaciones públicas a Dapper, pero también ha sido cerrado, como se muestra en la figura siguiente:
El inicio de sesión del hipervínculo es visible.
La razón de la excepción es que, tras obtener el auto-valor añadido, tomando como ejemplo el adaptador SQL Server, el cast se convierte en un error de tipo int, y el valor máximo de int es (int. MaxValue): 2147483647, como se muestra en la figura de abajo:
Para reproducir el método, crea una nueva tabla, añade la clave primaria que empieza por 2147483648 y el script SQL es el siguiente:
Referenciando el paquete Dapper.Contrib, realiza la operación de inserción con el siguiente código:
El error es el siguiente:
solución
Sustituye Dapper.Contrib por el paquete Dapper.Contrib.Unofficial con el siguiente comando:
La prueba ya no da error, como se muestra en la siguiente figura:
Consejo: Dapper.Contrib.Unofficial no está completamente probado, ¡por favor pruébalo tú mismo antes de usarlo!
(Fin)
|