Тип сущности «Программа» требует определения первичного ключа - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь сделать простой веб-сайт, который отслеживает студентов, программы и классы.Я создал объекты и получаю сообщение об ошибке при попытке добавить миграцию.

"Для типа объекта" Программа "требуется определить первичный ключ."

Я попытался использовать атрибут [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 голосов
/ 19 ноября 2018

Полный выстрел в темноте, но, исходя из названия этого класса, я предполагаю, что вы ссылаетесь не на Program.Убедитесь, что ваш DbSet<Program> действительно использует вашу сущность Program, а не что-то вроде класса Program, используемого на уровне консольного приложения.Скорее всего, вам понадобится явно использовать пространство имен, например, DbSet<MyApp.Models.Program>.

. Вы также можете рассмотреть возможность изменения имени класса, чтобы устранить любую вероятность неоднозначности.Есть некоторые имена классов, которые просто разрушат попытки использовать их, потому что они будут постоянно конфликтовать с фреймворком.Обычно это больше хлопот, чем стоит иметь это конкретное имя.Program является одним из них.

0 голосов
/ 19 ноября 2018

Вы можете попробовать использовать этот способ:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...