首页 > 其他分享 >解决 Dapper.Contrib 报错“值对于 Int32 太大或太小”问题

解决 Dapper.Contrib 报错“值对于 Int32 太大或太小”问题

时间:2023-08-06 14:22:55浏览次数:52  
标签:Int32 Console 报错 Contrib using Dapper

需求:在使用 Dapper.Contrib 执行 Insert 方法的时候,插入单条数据对于自增主键字段的返回值为插入后的值,当返回值大于 2147483647 的时候,Dapper.Contrib 会抛出异常“值对于 Int32 太大或太小”问题。

使用 Dapper.Contrib 插入数据的时候,报错“值对于 Int32 太大或太小”,此时数据库已经插入成功!怀疑是 ORM 框架的问题,然后在 GitHub 上面搜索,发现是一个已知的问题,Dapper 团队因为担心影响太大,一直没有修复,也有其他作者给 Dapper 提供 pr,也被关闭了,如下图:

https://github.com/DapperLib/Dapper.Contrib/issues/4



异常原因是获取到自增值后,以 Sql Server 适配器为例,强制转换成 int 类型报错,int 最大值为(int.MaxValue):2147483647,如下图:



复现方法,新建一个表,自增主键从 2147483648 开始,SQL 脚本如下:

  1. CREATE TABLE Test
  2. (
  3.     Id BIGINT IDENTITY(2147483648,1) PRIMARY KEY,
  4.     Name NVARCHAR(255)
  5. );
复制代码

引用 Dapper.Contrib 包,执行插入操作,代码如下:

  1. using Dapper.Contrib.Extensions;
  2. using System;
  3. using System.Data.SqlClient;
  4.  
  5. namespace ConsoleApp2
  6. {
  7.     internal class Program
  8.     {
  9.         const string sqlConn = "Data Source=.;Initial Catalog=TestDB1;user id=sa;password=123456";
  10.  
  11.         static void Main(string[] args)
  12.         {
  13.             try
  14.             {
  15.                 using (var connection = new SqlConnection(sqlConn))
  16.                 {
  17.                     var result = connection.Insert(new User { Name = "value" });
  18.                     Console.WriteLine(result);
  19.                 }
  20.             }
  21.             catch (Exception ex)
  22.             {
  23.                 Console.WriteLine(ex);
  24.             }
  25.             Console.WriteLine("ok");
  26.             Console.ReadKey();
  27.         }
  28.     }
  29.  
  30.     [Table("Test")]
  31.     public class User
  32.     {
  33.         [Key]
  34.         public long Id { get; set; }
  35.         public string Name { get; set; }
  36.     }
  37. }
复制代码

报错如下:



解决方案

将 Dapper.Contrib 替换成 Dapper.Contrib.Unofficial 包,命令如下:

  1. NuGet\Uninstall-Package Dapper.Contrib
  2. NuGet\Install-Package Dapper.Contrib.Unofficial -Version 2.0.97

测试不再报错,如下图:



提示:Dapper.Contrib.Unofficial 没有经过完整测试,请自行测试后使用!

修改后的代码 GitHub 地址:https://github.com/itsvse/Dapper.Contrib

(完)

标签:Int32,Console,报错,Contrib,using,Dapper
From: https://www.cnblogs.com/itsvse/p/17609374.html

相关文章

  • CentOS8安装Docker报错问题解决
    问题描述CentOS版本:8.5.2111。#cat/etc/redhat-releaseCentOSLinuxrelease8.5.2111安装准备:#安装所需软件包sudoyuminstall-yyum-utilsdevice-mapper-persistent-datalvm2#设置docker仓库:推荐阿里云sudoyum-config-manager--add-repohttp://mirrors.al......
  • nvidia-docker启动容器报错 Unknown runtime specified nvidia
    使用nvidia-docker创建容器时报错:Errorresponsefromdaemon:Unknownruntimespecifiednvidia.See'dockerrun--help'.主要原因在于配置docker镜像时,daemon.json文件被修改了。只要添加对应内容即可。vim /etc/docker/daemon.json原文件:{"registry-mirr......
  • ssm项目没添加lib目录的依赖导致页面404且没有任何报错
    问题:创建了一个ssm框架的模板,然后写了一个测试页面,页面404显示不出来且无任何报错。因为是个测试页面,只到controller层,检查半天web.xml和spring-controller.xml这两个配置文件都没啥问题,里面的视图解析器也没问题。关键这还不报错,然后在controller的方法中写一个后台输出,也没有输......
  • vue-table-width-grid 以及axios下载时报错
    importVuefrom'vue'importAppfrom'./App.vue'importrouterfrom'./router'importstorefrom'./store'//导入字体图标import'./assets/fonts/iconfont.css'importElementUIfrom'element-ui'impor......
  • 台达伺服电机(Delta ASDA - B3 - E)报错解决方式
    一硬件设备三台台达伺服驱动器(DeltaASDA-B3-E)树莓派4B伺服电机型号(ECM-B3M-CA0604RS1),输入2.4A110V,输出0.4KW1.27N.M3000r/min 二DeltaASDA-B3-E常见报错解决方式1恢复出厂设置(绝大部分报错都可以用以下方式处理)  P2.008修改数值为10断电重启2AL......
  • 多线程访问数据库报错
    在用flask实现http服务器的时候,只需要指定路由和访问方法,前端的访问就可以获取到,然后触发后端的响应函数,如果后端响应函数用公用的sqlconnection的时候,可能会导致数据库连接冲突报错,报错内容如下:AttributeError:'NoneType'objecthasnoattribute'read' 参考这篇博客的解......
  • 使用VS时的一些报错_1
    一.使用EasyX库函数中的loadimage函数时报错:loadimage没有与参数列表匹配的重载函数解决方法:右键解决方案,点击属性,【高级】→【高级属性】右【字符集】设置成【使用多字节字符集】即可解决。二.错误C4996‘strcpy’:Thisfunctionorvariablemaybeunsafe.Considerusi......
  • python fitz模块报错RuntimeError: Directory ‘static/’ does not exist 解决方案
    报错fitz模块报错RuntimeError:Directory‘static/’doesnotexist原因使用Python处理PDF文档时,需要使用fitz模块。由于Python3.8以上版本与fitz有兼容问题,会出现以下错误信息:RuntimeError:Directory‘static/’doesnotexist解决办法卸载fitz模块,安装pymupdf模块......
  • JAVA执行Linux命令报错Cannot run program error=2 , No such file or directory
    JAVA执行Linux命令报错Cannotrunprogramerror=2,Nosuchfileordirectory酒香不怕巷深IP属地:河北2019.04.2214:00:00字数411阅读6,648JAVA使用ProcessBuilder运行Linux命令报错:startfailed:Cannotrunprogram"xxx"(indirectory"xx"):error=2,......
  • kubelet启动报错
    报错启动不成功,查看/var/log/messages报错信息如下:Aug419:12:40k8s-master03kubelet:E080419:12:40.72626421343run.go:74]"commandfailed"err="failedtorunKubelet:validateserviceconnection:CRIv1runtimeAPIisnotimplementedforendpoint\......