为什么Razor视图生成器要求将视图模型在DbContext中定义为DbSet?
错误原因
你触发这个报错是因为添加Razor视图时选择了依赖Entity Framework的生成模板:这类模板默认会为指定模型生成配套的增删改查逻辑,会强制校验所选模型是否在你指定的DbContext中存在对应的DbSet属性,不管你的模型是不是需要映射数据库。
你完全不需要把MovieDetailResponse加入DbContext
作为只用于视图数据传输的视图模型,MovieDetailResponse本来就不需要映射数据库,你现在的MovieShopDbContext设计是正确的,强行添加DbSet<MovieDetailResponse>反而会让EF Core尝试在数据库中生成对应的多余表,引发后续问题。
解决方法
- 最简单的方案:添加视图时不要选择带「实体框架」标识的模板,选择「空Razor视图」「不使用Entity Framework的MVC视图」这类纯视图模板,仅指定视图绑定的模型类为
MovieDetailResponse即可,不需要选择DbContext,不会触发相关校验。 - 如果你需要模板生成基础的列表/表单结构避免从零手写:可以先选择实体类
Movie作为模型、选对应的MovieShopDbContext完成生成,再手动把视图头部的@model声明从Movie改成MovieDetailResponse,删除控制器里生成的EF操作代码即可。
内容的提问来源于stack exchange,提问作者Saige Zhang
相关产品推荐
相关产品推荐

