实体类型“程序”要求定义主键

时间:2018-11-19 05:36:21

标签: entity-framework asp.net-core asp.net-core-2.1

我正在尝试创建一个简单的网站来跟踪学生,课程和课程。我创建了实体,尝试添加迁移时遇到错误。

  

“实体类型'Program'需要定义主键。“

我尝试使用[Key]属性,并且有一个Id字段。创建另一个表就好了。我还应该尝试什么?

这是问题类别:

public class Program
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public bool UseRanks { get; set; }
}

这是我没有为以下项创建迁移的另一张表:

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string CellPhone { get; set; }
    public string HomePhone { get; set; }
    public string WorkPhone { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string ZipCode { get; set; }
    public DateTime BirthDate { get; set; }
}

这是我的ApplicationDbContext类中的内容:

public class ApplicationDbContext : IdentityDbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }

    //public DbSet<Attendance> Attendances { get; set; }
    public DbSet<Person> People { get; set; }
    public DbSet<Bill> Bills { get; set; }
    //public DbSet<Session> Sessions { get; set; }
    public DbSet<Program> Programs { get; set; }
}

我已注释掉其他实体,因为我试图一次添加一个。尝试添加所有实体的迁移会导致使用相同特定类的相同错误。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用这种方式:

public class Program
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public bool UseRanks { get; set; }
}

[Key]属性中添加Id属性。

在文件ApplicationDbContext.cs中,您可以覆盖OnModelCreating方法:

public DbSet<Program> Programs { get; set; }

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);

    builder.Entity<Program>().ToTable("Programs").HasKey(x => x.Id);
}

答案 1 :(得分:0)

在黑暗中完成拍摄,但是基于此类的名称,我猜测您所指的是错误的Program。确保您的DbSet<Program>实际上是在使用Program实体,而不是在控制台应用程序级别使用的Program类。您可能需要显式使用名称空间,即DbSet<MyApp.Models.Program>

您还可以考虑更改类的名称,以消除任何歧义。有些类名称试图使用它们会造成严重破坏,因为它们将与框架内容不断冲突。通常,拥有一个特定的名称比花更多的麻烦。 Program是其中之一。