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

ASP.NET Core应用打开Products Index页面时遇InvalidCastException错误求助

解决ASP.NET Core中InvalidCastException:Int32转String失败的问题

问题现象

运行ASP.NET Core应用并打开Products Index页面时,持续抛出以下错误:

InvalidCastException: Unable to cast object of type 'System.Int32' to type 'System.String'.
Microsoft.Data.SqlClient.SqlBuffer.get_String()
Microsoft.Data.SqlClient.SqlDataReader.GetString(int i)
lambda_method(Closure , QueryContext , DbDataReader , ResultContext , int[] , ResultCoordinator )
Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable<T>+AsyncEnumerator.MoveNextAsync()
Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync<TSource>(IQueryable<TSource> source, CancellationToken cancellationToken)
Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync<TSource>(IQueryable<TSource> source, CancellationToken cancellationToken)
ControleEstoque.Controllers.ProductsController.Index() in ProductsController.cs
+
List<Product> model = await _context.Products.ToListAsync();
...(省略后续调用栈)

根因分析

Product实体类中ProviderId属性被声明为string类型,但数据库对应Products表的ProviderId列实际为int类型。EF Core读取数据时,尝试将整数类型的值强制转换为字符串,触发类型转换异常。

解决方案

根据业务需求选择以下任一修复方式:

方案1:修改实体类ProviderId为int类型(推荐,若ProviderId为关联主键)

如果ProviderId本质是整数(例如关联供应商表的主键ID),直接调整Product实体类的属性类型:

namespace ControleEstoque.Models
{
    [Table("Products")]
    public class Product
    {
        [Key]
        public int Id { get; set; }
        [Required(ErrorMessage ="Obrigatório informar nome")]
        public string Name { get; set; }
        [Required(ErrorMessage = "Obrigatório informar Descrição")]
        public string Description { get; set; }
        [Required(ErrorMessage = "Obrigatório informar Id do Fornecedor")]
        public int ProviderId { get; set; } // 改为int类型
    }
}

修改后,确保控制器中涉及ProviderId的操作保持一致(例如Edit方法若需更新该字段,需在Bind参数中添加ProviderId)。

方案2:修改数据库列类型为字符串类型

若业务上ProviderId必须为字符串,需修改数据库Products表的ProviderId列类型为varchar或nvarchar,与实体类的string类型匹配。

验证

修改完成后重新运行应用,访问Products Index页面,确认错误消失,数据正常加载。

内容的提问来源于stack exchange,提问作者Gabriel M Xavier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:25:28