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

使用GUID跟踪Cookie活动时遇InvalidCastException类型转换错误求助

解决InvalidCastException: Decimal转Int64的问题

这个错误其实很常见,大概率是你的EF Core实体类和数据库表的字段类型不匹配导致的,我给你一步步拆解解决思路:

先定位问题根源

错误提示InvalidCastException: Unable to cast object of type 'System.Decimal' to type 'System.Int64',说明EF在查询数据库时,把某个decimal类型的字段往实体类的long(也就是Int64)属性上转,转不动就报错了——和你写的GUID解析逻辑没关系,是其他字段的锅。

具体解决步骤

  • 第一步:核对实体类和数据库字段类型
    打开你的Upload_Transaction实体类,再打开数据库里对应的表,逐字段对比类型。比如如果实体类里有个public long Id { get; set; },但数据库里Id字段是decimal(18,0),这就完全对不上了。
    解决办法二选一:

    • 把实体类里的属性改成decimal类型,比如public decimal Id { get; set; }
    • 如果数据库字段应该是整数,就把数据库里的字段改成bigint(对应C#的long)
  • 第二步:确认GUID查询逻辑的完整性
    你贴的代码里查询语句没写完,完整的应该是这样的,顺便检查Cookie_GUID的类型是否匹配:

    string Cookies2 = Request.Cookies["Upload_Guid"].ToString();
    Guid Cookie_Guid = Guid.Parse(Cookies2);
    // 获取Cookie值并解析为GUID
    var GID_Variable = await _context.Upload_Transaction.SingleOrDefaultAsync(m => m.Cookie_GUID == Cookie_Guid);
    

    要保证实体类的Cookie_GUID是Guid类型,数据库里对应的字段是uniqueidentifier,避免这里再出类型问题。

  • 第三步:同步实体类和数据库(如果用EF迁移)
    要是你用的是Code First模式,修改实体类后需要更新迁移:

    Add-Migration FixDecimalLongMismatch
    Update-Database
    

    手动改数据库字段的话,直接在数据库管理工具里调整就行。

额外排查小技巧

  • 可以用EF Core的日志功能,打印出实际执行的SQL语句,看看查询时到底是哪个字段触发了类型转换错误。
  • 检查有没有用Data Annotation或者Fluent API错误配置字段类型,比如给long属性加了[Column(TypeName = "decimal")]这种矛盾的配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:27:20