我正在尝试创建一个简单的网站来跟踪学生,课程和课程。我创建了实体,尝试添加迁移时遇到错误。
“实体类型'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; }
}
我已注释掉其他实体,因为我试图一次添加一个。尝试添加所有实体的迁移会导致使用相同特定类的相同错误。
答案 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
是其中之一。