#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].