在 MVC 核心中搭建脚手架控制器时找不到主键

问题描述 投票:0回答:6

当尝试搭建控制器时,出现以下错误:

“运行所选代码生成器时出错:‘实体 类型“Company.Models.Office”需要在以下位置定义主键 Microsoft.VisualStudio.Web.CodeGeneration.ActionInvoker.b_6-0()"

我是 MVC Core 的新手,但我的理解是主键默认定义为 ID 或 classnameID。我还尝试添加 [Key] 属性并将主键重命名为 OfficeID。我在另一个班级经历了类似的过程,但没有遇到这个问题

public class Office
    {
        public int ID;
        public string Name;
        public int SiteID;

    }
c# asp.net-core-mvc
6个回答
16
投票

我不确定这是否能解决您的问题,但请尝试以下操作。这里的主要区别是使用 { get;放; } 属性。

public class Office
{
    [Key]
    public int OfficeID { get; set; }
    public string Name { get; set; }
    public int SiteID { get; set; }
}

您应该意识到,您的主键叫什么并不重要。但是,为了简单起见并遵循标准,您应该将其称为“ID”或表/类名称加“ID”。

另外,尝试重新启动 Visual Studio 和你的电脑。有时,我发现这是解决某些编译时错误的唯一方法。


7
投票

我在 Asp net core Mvc 中搭建支架时遇到了类似的问题。将其添加到您的 Dbcontext 文件可能会有所帮助!!

protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                base.OnModelCreating(modelBuilder);
                modelBuilder.Entity<Office>(entity =>
                {
                    entity.HasKey(x=>x.OfficeID);

                });
            }

3
投票

确保删除entity.HasNoKey();也来自模型构建器。


0
投票

我在搭建asp.net core MVC控制器方法时发现了类似的错误。该错误报告的错误与本问题标题中的错误相同。

这是我为“使用实体框架搭建带有视图的 MVC 控制器”的脚手架而输入的模型类的 POCO

我终于明白了缺少了什么。 [Key] 属性存在,但 POCO 的成员未声明为 public。不要忘记您的公开关键字!!

public class RiskLimit
{
    [Key]
    int Id { get; set; }
    DateTime BeginMappingDateTime { get; set; }
    DateTime? EndMappingDateTime { get; set; }
}

一旦我将代码更改为

public class RiskLimit
{
    [Key]
    public int Id { get; set; }
    public DateTime BeginMappingDateTime { get; set; }
    public DateTime? EndMappingDateTime { get; set; }
}

0
投票

我刚刚遇到了这个问题。我忘记在 SQL 表中设置主键。

我最终删除了所有模型类,并使用 -

重新创建它们

Scaffold-DbContext "Server=.\sqlexpress;Database=YOURDB;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models 

之后,我就能够创建控制器了。


-1
投票

首先,确保您的表包含主键,然后运行以下命令,以便使用 EF Db 优先方法创建模型类:

脚手架-DbContext “服务器=DESKTOP-48G00GJ;数据库=AXITClassDesignEg;Trusted_Connection=True;” Microsoft.EntityFrameworkCore.SqlServer -OutputDir 模型 -f

注意:最后使用

-f

然后检查 DbContext 文件,发现

entity.Haskey
已创建。 转到控制器,右键单击“添加脚手架”。完成!!!

© www.soinside.com 2019 - 2024. All rights reserved.