System.InvalidCastException: Unable to cast object of type ‘System.Boolean‘ to type ‘System.SByte‘.

本文介绍了在使用EF Core查询MySQL数据库时遇到的`System.InvalidCastException`异常,该异常源于tinyint(1)字段被转换为Boolean再尝试转换为SByte。提供了两种解决方案:一是修改映射关系,指定tinyint(1)对应的数据库类型为bit(1);二是设置MySQL连接字符串中的`TreatTinyAsBoolean=false`,避免数据转换。选择任一方案即可解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一次.NET CORE下的异常.

异常信息如下:
System.InvalidCastException: Unable to cast object of type ‘System.Boolean’ to type ‘System.SByte’.

通常发生在EF Core查询数据时使用Mysql ,同时表中含有类型为tinyint(1)列的情况下。

EF Core将tinyint(int) 映射为System.SByte类型(按理说应该映射成System.Byte,实际上就是System.Byte,也不知道为啥处理的时候使用SByte,学艺不精,有知道的大佬请一定告知,谢谢!),当我们从Mysql拿数据时,Mysql会将tinyint(int)转换成Boolean类型返回,EF Core拿到这个数据时,会按照映射关系将其转换成System.SByte,然后就会出现以下异常。
System.InvalidCastException: Unable to cast object of type ‘System.Boolean’ to type ‘System.SByte’.

Mysql 的 tinyint 类型可以设置为有符号,也可设置为无符号,所以映射成System.SByte没有问题。

两个解决方案

(1)修改映射关系,在代码中指定实体类中Boolean类型属性的对应数据库类型为bit(1),这样就会形成一个bit(1)<==>boolean的映射。

映射是数据库类型和.NET类型之间的映射,如果你没有指定实体中属性对应的数据库类型,那么EFCore会根据数据库架构,推断出每个属性对应的数据库类型

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值