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
相关产品推荐
相关产品推荐

