Ошибка миграции: column already exists
Пытаюсь добавить миграцию:
dotnet ef migrations add add_ProductGroup --context migrationsdbcontext
dotnet ef database update --context migrationsdbcontext
И после Update выдает ошибку: "column "ProductGroupId" of relation "Products" already exists".
Модель ProductGroup (для нее делаю миграцию):
public class ProductGroup : IHaveIntegerId
{
public int Id { get; set; }
[Localize] public string Title { get; set; }
public UserGroup? UserGroup { get; set; }
public ICollection<Product> Products { get; set; }
public int? RegionId { get; set; }
public Region Region { get; set; }
}
В таблице Products есть колонка ProductGroupId.
Я до этого создал миграцию и удалил в VS через TeamExplorer. Может, из таблицы Products не удалилась колонка ProductGroupId. Непонятно, как ее теперь удалить
Ответы (1 шт):
К сожалению вы некорректно сделали, удалив файлы после того, как применили транзакцию.
Правильно было сначала откатить миграцию через Remove-Migration -- она выполняет все проверки структуры, аккуратно убирает добавленные поля, сама удаляет файлы миграции.
Запомните эту команду на будущее, пригодится.
Как теперь всё-таки выкрутиться из ситуации и вернуться к корректному, согласованному состоянию:
- Вручную удалите поле через SSMS
- В таблице базы данных __EFMigrationsHistory удалите строку с вашей удалённой миграцией 20200217112046
Это самый крайний случай (он основан на понимании как устроен и работает EF Core), так же у вас есть альтернативы.
Во-первых, если вы успели файлы положить в версионный контроль, то можете просто достать их обратно и удалить корректно через Remove-Migration
Во-вторых, если это не продакшн база, а учебно-тренировочная и вам не жалко данных, которые в ней содержатся -- можно просто удалить базу и создать заново дав команду Update-Database.
Важно! В любом случае я бы рекомендовал вам предварительно сделать бекап, на случай подстраховаться от того, что что-то пойдёт не по плану.
PS И отдельно, обратите внимание, что у вас в файле *.csproj после выполнения Remove-Migration остались строки удаления миграции, они не мешают, но я люблю чистоту, поэтому удаляю их и не коммичу.
