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

EF Core脚手架生成Razor视图时提示'Primary key not found'

问题原因

ASP.NET Core 基架(脚手架)工具生成控制器与Razor视图的逻辑强依赖实体主键定义,用来生成增删改查、详情、删除等操作的路由绑定和数据操作逻辑。即便你已经在DbContext中为视图映射实体配置了HasNoKey(),基架工具本身不会识别无键实体配置,因此会抛出Primary key not found错误。
配置HasNoKey()只影响EF Core运行时的实体跟踪、查询行为,不会作用于基架生成阶段。

可行解决方案
  • 临时修改配置骗过基架生成,完成后回滚
    选择实体中可以唯一标识单条记录的非空字段(你的场景中CódigoDoRmm如果满足唯一非空要求即可),临时给字段加[Key]特性,同时注释掉Fluent API中的entity.HasNoKey()配置。
    临时修改后的实体示例:
    using System;
    using System.ComponentModel.DataAnnotations;
    
    namespace PSWebase2.Models
    {
        public partial class ViewCalibraRmm
        {
            [Key] // 脚手架生成完成后可删除
            public string CódigoDoRmm { get; set; }
            public DateTime? DataUc { get; set; }
            public DateTime? DataPc { get; set; }
        }
    }
    
    等基架生成完控制器和视图后,删掉临时加的[Key]特性,恢复HasNoKey()配置即可。注意生成的控制器中会默认附带新增、编辑、删除这类对视图无效的操作,需要手动删除,只保留列表查询相关的Action。
  • 手动编写列表页代码
    由于无键实体映射的SQL视图本身只支持查询操作,完全可以跳过基架生成步骤:直接在控制器中写查询逻辑_context.ViewCalibraRmm.ToList()传递给视图,再手动编写Razor页面遍历模型渲染数据即可,省去来回修改配置的步骤,也不会生成冗余的无效操作代码。
  • 直接为视图实体配置可用主键
    EF Core中为视图映射的实体配置主键,仅用于运行时的变更跟踪、查询结果去重,不会实际在数据库视图上创建主键约束。如果你的视图中存在确定唯一、非空的字段,可以直接将该字段配置为主键,替换掉原来的HasNoKey()配置,基架就能正常识别,运行时也不会报错。比如你的场景中如果CódigoDoRmm满足唯一非空要求,直接写entity.HasKey(e => e.CódigoDoRmm)即可。
注意事项

不要为存在重复值或空值的字段配置实体主键,否则运行时会出现数据重复、实体跟踪异常等问题。如果视图中没有任何可唯一标识单条记录的字段,优先选择前两种方案。

内容的提问来源于stack exchange,提问作者Eduardo Bracho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:39:22