You need to enable JavaScript to run this app. 使用ToListAsync后随机出现System.Int64转String的InvalidCastException异常
优惠活动
大模型
产品
解决方案
定价
更多

使用ToListAsync后随机出现System.Int64转String的InvalidCastException异常

可能触发原因

  • DbContext 生命周期配置错误:如果你的DbContext被注册为单例,或者多个异步请求共用同一个DbContext实例,并发执行ToListAsync时会导致上下文的实体映射状态混乱,随机出现类型匹配错误。这类问题在低并发的本地环境很难复现,只有生产环境有一定并发量时才会偶发。
  • EF Core 版本存在已知bug:部分早期版本的EF Core(比如3.1.x、5.0的部分小版本)存在异步查询时实体映射缓存错乱的问题,多个不同类型的异步查询同时执行时,会偶发拿错实体属性和数据库列的映射关系,导致字符串列被映射到long类型的Id字段上。
  • 动态查询/视图列错位:如果该实体的查询涉及到原生SQL拼接、动态字段查询或者映射到数据库视图,异步查询时可能偶发结果集列顺序错位,刚好把其他字符串类型的列映射到了Id字段的位置,触发类型转换异常。
  • 异步上下文同步阻塞:如果上层调用GetAllAsync时用了.Result、.Wait()这类同步阻塞方法,会导致EF Core的异步状态机出现异常,进而引发结果解析错误。

排查建议

  • 先确认DbContext的注册生命周期,必须为Scoped,禁止跨请求共享DbContext实例,同时检查所有调用GetAllAsync的上层逻辑,不要使用同步阻塞的方式调用异步方法。
  • 将EF Core升级到当前大版本的最新稳定补丁版,排除官方已经修复的异步映射bug。
  • 在报错位置添加全局异常捕获,触发异常时把EF Core生成的原始SQL、对应的参数以及结果集的原始数据输出到日志,快速定位是SQL生成错误还是结果解析错误。
  • 如果涉及原生SQL查询,强制指定查询列的顺序和实体属性顺序一致,不要使用select *类的语法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 20:54:02