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

ASP.NET MVC+EF Core连接数据库报错:模型类型不匹配

问题解决:传入View的模型类型不匹配错误

错误根源

你碰到的InvalidOperationException是因为控制器传给视图的是EF Core的DbSet对象,但视图期望接收List<T>类型。_db.Publisher_master_tbl本质是DbSet<PublisherModel>,虽实现了IEnumerable<T>,但视图的模型声明指定了List<T>,导致类型不兼容。另外你的模型类缺少无参构造函数,EF Core从数据库读取数据时需要用它实例化对象,这也是潜在隐患。

修复步骤

1. 给模型类补充无参构造函数

修改PublisherModel,添加无参构造(建议公开,EF Core依赖它创建实体实例):

public class PublisherModel
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }

    // EF Core需要的无参构造函数
    public PublisherModel() { }

    public PublisherModel(int id, string name)
    {
        Id = id;
        Name = name;
    }
}

2. 控制器中将DbSet转换为List

在adminpublishermanagement方法里,调用ToList()把DbSet转为List<T>,匹配视图所需类型:

public IActionResult adminpublishermanagement()
{
    // 执行查询并转为List,满足视图的模型类型要求
    Publishers = _db.Publisher_master_tbl.ToList();
    return View(Publishers);
}

3. 确认视图的模型声明

确保视图顶部声明了正确的模型类型(如果没加则补上):

@model List<test_deploiement.Models.PublisherModel>

<table>
    <tbody>
        @foreach (var publisher in Model)
        {
           <tr>
              <td scope="row">@Html.DisplayFor(modelItem => publisher.Id)</td> 
              <td>@Html.DisplayFor(modelItem => publisher.Name)</td>
          </tr>
        }
    </tbody>
</table>

说明

  • ToList()会立即执行EF Core的查询,将数据库数据加载到内存中的List集合,完全匹配视图的类型要求。
  • 无参构造函数是EF Core的硬性要求,它需要通过无参构造创建实体实例后,再为属性赋值映射数据库记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:07:37