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

System.InvalidCastException错误:Int32转String类型转换失败排查

问题排查与解决

错误根源

System.InvalidCastException: 无法将类型为“System.Int32”的对象强制转换为类型“System.String” 异常的核心原因是:数据库中Customer表的Age字段类型为整数(Int32),但实体类Customer中把Age定义成了string类型。当EF Core执行查询(db.Customers.FirstOrDefault(...))读取数据库数据时,会尝试把整数类型的字段值转换为字符串类型的实体属性,触发类型转换失败。

解决方案

根据业务需求选择以下两种修复方式:

方式一:调整实体类属性类型匹配数据库(推荐)

如果Age在业务逻辑中应该是数值类型(比如用于计算年龄),直接修改Customer实体的Age属性为整数类型,同步处理DTO的赋值逻辑:

  1. 修改Customer实体类:
public partial class Customer 
{ 
    public int CustomerId { get; set; } 
    public int? UserId { get; set; } 
    public string? CustomerName { get; set; } 
    // 将string改为int(若允许为空则用int?)
    public int Age { get; set; } 
    public string Gender { get; set; } = null!; 
    public string? ContactInfo { get; set; } 
    public virtual ICollection<Order> Orders { get; set; } = new List<Order>(); 
    public virtual User? User { get; set; } 
}
  1. 赋值DTO时将整数转为字符串(如果DTO需要字符串类型的Age):
UserCDTO cDTO = new UserCDTO
{
    Username = user.Username,
    Address = user.Address,
    CustomerName = client.CustomerName,
    Age = client.Age.ToString(), // 把整数转为字符串
    Gender = client.Gender,
    ContactInfo = client.ContactInfo,
};

方式二:调整数据库字段类型匹配实体类

如果业务上Age必须是字符串类型(比如存储带单位的年龄,如"25岁"),则修改数据库中Customer表的Age字段类型为varchar或nvarchar,确保和实体类的string类型一致。

额外检查

如果使用EF Core Fluent API做了自定义映射,需确认映射配置的字段类型和实体属性、数据库字段一致:

// 示例:确保Age字段映射为int类型
modelBuilder.Entity<Customer>()
    .Property(c => c.Age)
    .HasColumnType("int");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:35:06