Я внес несколько простых изменений в наше приложение, использующее EF Core. Я только что изменил точность нескольких столбцов с десятичным типом, и все. Когда я попытался создать новую миграцию с помощью команды dotnet ef migrations add ...
, я увидел операторы миграции, которые я ожидал увидеть:
migrationBuilder.AlterColumn<decimal>(
name: "Value_Amount",
schema: "Payment",
table: "Withdrawals",
type: "DECIMAL(18, 5)",
nullable: false,
oldClrType: typeof(decimal),
oldType: "DECIMAL(15, 2)");
Все выглядит хорошо, кроме того, что он также показывает множество странных заявлений DropForeignKey
, DropUniqueConstraint
, DropColumn
. Я просмотрел довольно много из них, и ни один из столбцов, упомянутых в операторах DropX
, даже не существует в базах данных или классах моделей. Имена столбцов в этих операторах DropX
часто заканчиваются на X_TempId
, X_TempId1
и т. д.
Я попросил своего коллегу проверить (с помощью git) ту же ветку, что и у меня, и запустить те же команды (используя те же самые версии dotnet
), но его миграция не показывает никаких странных операторов DropXYZ
. Пожалуйста, поправьте меня, если я ошибаюсь, но я считаю, что команда dotnet ef migrations add ...
сравнивает текущее состояние из SomethingModelSnapshot
с последним состоянием в классах модели и создает изменения БД, чтобы перейти от текущего состояния к последнему. Если это так, то выполнение команды dotnet ef migrations add ...
в одном и том же наборе файлов всегда должно давать одни и те же результаты, не так ли?
Есть идеи о том, что может происходить и / или как это исправить?
Некоторые версии:
dotnet --version = 2.2.100
dotnet ef --version = 2.2.0-rtm-35687
<TargetFramework>netcoreapp2.1</TargetFramework>
Windows 10, commands executed via Powershell.
У меня такая же проблема. Я тоже использую Core 2.2. Смог обойти это, выполнив новую начальную миграцию. Новые миграции после этого не имели этой проблемы.
После некоторого расследования выяснилось, что это ошибка EF Core. Вы можете отследить это здесь на их гитхабе.
Произошло это после обновления с 2.1 до 2.2. Но обратите внимание, что это не просто ошибка EF Core 2.2, поскольку воссоздание новой миграции с нуля прекрасно работает в 2.2, но это скорее критическое изменение интерпретации снимка модели.
Если у вас есть работающий проект, который воспроизводит проблему, сделайте это здесь: github.com/aspnet/EntityFrameworkCore/issues/14445