EF Core Migration Add - создает миграцию с неожиданными инструкциями DropForeignKey, DropUniqueConstraint, DropColumn

Я внес несколько простых изменений в наше приложение, использующее 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.
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
546
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

У меня такая же проблема. Я тоже использую Core 2.2. Смог обойти это, выполнив новую начальную миграцию. Новые миграции после этого не имели этой проблемы.

Если у вас есть работающий проект, который воспроизводит проблему, сделайте это здесь: github.com/aspnet/EntityFrameworkCore/issues/14445

eddyP23 23.01.2019 08:55
Ответ принят как подходящий

После некоторого расследования выяснилось, что это ошибка EF Core. Вы можете отследить это здесь на их гитхабе.

Произошло это после обновления с 2.1 до 2.2. Но обратите внимание, что это не просто ошибка EF Core 2.2, поскольку воссоздание новой миграции с нуля прекрасно работает в 2.2, но это скорее критическое изменение интерпретации снимка модели.

Другие вопросы по теме