Я проверил это с очень простым DbContext.Я надеюсь, что это работает для вас.
По сути, вам нужно создать новый снимок вашей базы данных в ее текущем состоянии и использовать его для первоначальной миграции.После этого вы можете создавать миграции как обычно.
Резервное копирование вашей базы данных и Резервное копирование проекта , затем удалите папку Migrations, если она у вас есть..
Создайте временную модель и контекст из вашей базы данных.Вы запускаете это из командной строки в папке вашего проекта.
dotnet ef dbcontext scaffold "{Your connection string}" Microsoft.EntityFrameworkCore.SqlServer -o TempModels -c ApplicationDbContext
Убедитесь, что -c совпадает с именем вашего существующего DbContext и поставщиком, например.SqlServer соответствует вашему поставщику базы данных.
Это создаст папку с именем TempModels в вашем проекте и новый DbContext в пространстве имен TempModels.
Подробнее о реверс-инжиниринге вашей базы данных можно прочитать здесь https://docs.microsoft.com/en-us/ef/core/managing-schemas/scaffolding.
Используйте этот новый контекст для создания новой миграции
PM> add-migration Initial -Context YourApplicationName.TempModels.ApplicationDbContext
Удалите папку TempModels
Вручную добавьте имя файла с помощью .cs из миграции, которую вы только что создали, в вашу dbo .__ EFMigrationsHistory.Это значит, что update-database
не будет пытаться применить миграцию, которую мы только что сделали, когда мы вызываем ее на последнем шаге.
Пример:
В ваших файлах миграции .designer.cs и файлах ModelSnapshot вам придется изменить пространство имен вашего
DbContext
// change this
using MyApplication.TempModels
// to whatever name space your real dbcontext lives in
using MyApplication.Data
Создайте еще одну миграцию.Этот будет содержать отличия вашего исходного DbContext от временного, который вы создали из базы данных.Затем используйте его для обновления базы данных.
PM> add-migration 1
PM> update-database