Как исправить «Тип сущности требует определения первичного ключа». ошибка в ASP.Net Ядро

#sql-server #asp.net-core

#sql-server #asp.net-core

Вопрос:

Я настраиваю новую базу данных, используя метод code-first. И после того, как я определил свои модели с их ключевыми атрибутами, ему все еще не удается найти первичный ключ для моделей.

Я попытался использовать традиционное именование «Id» и атрибуты [Key].

Одна из моих моделей — эта.

 public class Band
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Id;
    public Institution Institution;
    public BandName BandName;
}
  

И код для контекста

 public class ApplicationDbContext : IdentityDbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
    public DbSet<Band> bands { get; set; }
}
  
 PM> add-migration migration_1
Output: The entity type 'Band' requires a primary key to be defined.
  

Ответ №1:

Вам нужно добавить getter и setter к вашему идентификатору.

Ваш класс должен выглядеть следующим образом :

 public class Band
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Id { get; set; }
    public Institution Institution { get; set; }
    public BandName BandName { get; set; }
}
  

Ядру EF необходимо иметь установщик, когда он считывает данные из базы данных и заполняет ваш набор данных.
Подумайте также о добавлении геттеров и сеттеров для других свойств класса (как я добавил это в вашем примере).

ПРИМЕЧАНИЕ: частный сеттер также будет работать public long Id { get; private set; }