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

使用Dapper查询MySQL longtext字段时抛出NullReferenceException异常

异常原因分析
  • 官方MySQL驱动底层bug:你使用的MySql.Data官方驱动存在已知缺陷,部分旧版本(如6.9.x系列、8.0.20之前的部分版本)在读取TEXT/LONGTEXT类型的大长度字段时,内部超时处理逻辑HandleTimeoutOrThreadAbort没有做空对象校验,只有当查询包含这类大字段时才会触发空引用异常,和字段本身是否存储空值无关。
  • 实体类映射不兼容:你的Data类中对应description字段的属性类型和数据库字段类型不匹配,例如数据库字段为字符串类型,实体类对应属性定义为非可空值类型,Dapper映射转换时触发驱动内部异常。
  • 查询超时阈值不足:description字段存储内容体积较大,查询读取耗时超过默认的30秒命令超时阈值,触发了存在漏洞的超时处理逻辑。
解决方案
  • 替换为MySqlConnector驱动:优先替换使用社区开源维护的MySqlConnector驱动,该驱动修复了MySql.Data的大量已知底层bug,完全兼容Dapper和原有MySQL操作语法,替换后无需修改业务代码即可解决该类异常。
  • 升级官方驱动版本:如果必须使用官方MySql.Data驱动,将驱动升级到最新稳定版即可修复该超时处理逻辑的空引用漏洞。
  • 延长查询超时时间:调用Dapper的Query方法时显式指定更长的超时时间,避免触发超时逻辑,示例代码如下:
List<Data> queryResult = new List<Data>();
using(var localConnection = new MySqlConnection(str_connection_string))
{
    queryResult = localConnection.Query<Data>("SELECT int_id, description from product", commandTimeout: 60).ToList();
}
  • 校验实体类定义:确认Data类中description对应的属性为string类型,和数据库字段类型匹配,示例定义如下:
public class Data
{
    public int int_id { get; set; }
    public string description { get; set; }
}

注:若你实际代码中ToList()拼写为Tolist()属于语法错误,会引发编译错误,若为提问笔误可忽略该提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:15:04