Exigences : Lors de l’utilisation de Dapper.Contrib pour exécuter la méthode Insert, la valeur de retour d’une donnée unique insérée pour le champ clé primaire auto-incrémentable est la valeur après l’insertion, et lorsque la valeur de retour est supérieure à 2147483647, Dapper.Contrib lance l’exception « La valeur est trop grande ou trop petite pour Int32 ».
Lors de l’utilisation de Dapper.Contrib pour insérer des données, l’erreur « La valeur est trop grande ou trop petite pour Int32 », et la base de données a été insérée avec succès ! j’ai soupçonné qu’il s’agissait d’un problème avec le framework ORM, puis j’ai cherché sur GitHub et j’ai trouvé que c’était un problème connu,L’équipe de Dapper ne l’a pas corrigée car elle craint que cela ait trop d’impact, et d’autres auteurs ont fourni des relations publiques à Dapper, mais elle a aussi été fermée, comme montré dans la figure ci-dessous :
La connexion hyperlientérée est visible.
La raison de cette exception est qu’après avoir obtenu l’auto-valeur ajoutée, en prenant l’adaptateur SQL Server comme exemple, le casting est lancé en une erreur de type int, et la valeur maximale d’int est (int. MaxValue) : 2147483647, comme montré dans la figure ci-dessous :
Pour reproduire la méthode, créez une nouvelle table, ajoutez la clé primaire à partir de 2147483648, et le script SQL est le suivant :
En référence au package Dapper.Contrib, effectuez l’opération d’insertion avec le code suivant :
L’erreur est la suivante :
solution
Remplacez Dapper.Contrib par le package Dapper.Contrib.Unofficial par la commande suivante :
Le test ne donne plus d’erreur, comme le montre la figure suivante :
Conseil : Dapper.Contrib.Unofficial n’est pas entièrement testé, veuillez le tester vous-même avant de l’utiliser !
(Fin)
|