You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

InvalidCastException异常求助:无法将DBNull转换为String

问题分析与解决方案

问题根源

这个InvalidCastException并非你的控制器代码直接导致,而是EF Core从MySQL读取数据时,数据库字段类型与User实体类的属性类型不匹配,使得MySqlDataReader尝试将数据库中的非字符串类型强制转换为字符串时失败。

常见触发场景:

  • 数据库字段为INT/DATETIME/BIT类型,但User实体对应属性定义为string
  • 数据库字段允许NULL,但实体属性是不可为空的string,且该字段存在NULL值

排查步骤

  • 核对User实体类与MySQLUsers表的字段类型:逐个检查属性数据类型,比如数据库id是INT,实体不能写成string;数据库create_time是DATETIME,实体要对应DateTime或DateTime?
  • 查看完整堆栈跟踪(你提到的附图),定位具体是哪个字段转换失败——堆栈信息通常会明确指出引发问题的属性

修复示例

假设User实体错误地将数据库INT类型的Age属性定义为string,修正如下:

public class User
{
    // 错误写法:public string Age { get; set; }
    public int Age { get; set; } // 正确匹配数据库INT类型
    // 其他属性同理核对修正
}

如果是可空字段问题,比如数据库Remark允许NULL,实体需改为:

public string? Remark { get; set; }

额外提示

  • 无需修改MySqlDataReader.cs,这是MySqlConnector库的源码文件,你的问题属于数据类型映射错误,与库本身无关
  • 修正实体类后,确保EF Core模型与数据库结构同步(可通过迁移或手动更新数据库实现)

内容的提问来源于stack exchange,提问作者Blue Hues

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 05:48:18