Перенос Entity Framework — столбец не переносится

#c# #entity-framework #entity-framework-migrations

#c# #entity-framework #entity-framework-миграции

Вопрос:

Я добавил новое свойство в свою сущность и выполнил команду для создания новой миграции, но сгенерированная миграция ничего не содержит. Похоже, EF не обнаружил добавление столбца. Есть ли что-то еще, что мне нужно сделать, чтобы добавить столбец при миграции? Это мой класс:

  public class Group
{
    public int Id { get; set; }
    public int OrganizerId { get; set; }
    public string Name { get; set; }
    public string ImageUrl { get; set; }

    public bool IsOnline { get; set; }

    public virtual User Organizer { get; set; }
    public virtual ICollection<GroupParticipation> GroupParticipations { get; set; }
    public virtual ICollection<Question> Questions { get; set; }
    public virtual ICollection<Subject>  Subjects{ get; set; }
}
 

Я выделил свойство, которое я пытаюсь добавить, которое называется «IsOnline». После добавления его в класс и компиляции проекта я запускаю следующую команду:

 Add-Migration AddGroupIsOnline
 

Он правильно сгенерировал новую миграцию, но вот как выглядит миграция:

 public partial class AddGroupIsOnline : DbMigration
{
    public override void Up()
    {
    }

    public override void Down()
    {
    }
}
 

Вверх и вниз ничего не делают. Он должен был добавить мое свойство, верно ли мое предположение?

Есть идеи о том, что может происходить?

Спасибо за всю помощь!

Ответ №1:

Хорошо, итак, я нашел «проблему». По сути, автоматическая миграция произошла в какой-то момент после того, как я добавил свойство IsOnline в свой класс Group. Поэтому, когда я запускал Add-Migration AddGroupIsOnline , никаких изменений обнаружено не было (поскольку он уже был изменен автоматической миграцией).

В итоге я нашел ответ, просмотрев таблицу моей базы данных, и столбец уже был там. Затем я посмотрел на таблицу миграции, которая создается после активации миграции БД, и я нашел следующую строку:

Запись миграции

Затем я удалил столбец IsOnline, удалил запись автоматической миграции из базы данных и затем повторно запустил:

 Add-Migration AddGroupIsOnline
 

И вот результат:

 public partial class AddGroupIsOnline : DbMigration
{
    public override void Up()
    {
        AddColumn("dbo.Groups", "IsOnline", c => c.Boolean(nullable: false));
    }

    public override void Down()
    {
        DropColumn("dbo.Groups", "IsOnline");
    }
}
 

Итак, мой собственный совет здесь таков: если в миграции ничего не отображается, переносить нечего. Проверьте базу данных и автоматические миграции в таблице [__MigrationHistory].