Как обновить базу данных с использованием структуры сущностей без истории миграции - PullRequest
0 голосов
/ 28 февраля 2019

У меня приложение в рабочем состоянии и работает нормально, у меня тоже есть папка проекта.

Теперь я обновил и создал еще tables внутри этого проекта.К сожалению, я deleted the migrations files inside migration folder.

Теперь у меня есть база данных, а внутри migration history table Я недавно перенес строку истории.Но этот файл не существует в папке моего проекта, как я уже сказал выше.

Теперь, когда я запускаю add-миграцию, она создает всю базу данных с нуля, а не просто обновляет ее, создавая дополнительные таблицы в файле миграции.

Есть ли способ решить мою проблему

1 Ответ

0 голосов
/ 28 февраля 2019

Я проверил это с очень простым DbContext.Я надеюсь, что это работает для вас.

По сути, вам нужно создать новый снимок вашей базы данных в ее текущем состоянии и использовать его для первоначальной миграции.После этого вы можете создавать миграции как обычно.

  1. Резервное копирование вашей базы данных и Резервное копирование проекта , затем удалите папку Migrations, если она у вас есть..

  2. Создайте временную модель и контекст из вашей базы данных.Вы запускаете это из командной строки в папке вашего проекта.

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 не будет пытаться применить миграцию, которую мы только что сделали, когда мы вызываем ее на последнем шаге.

Пример:

enter image description here

В ваших файлах миграции .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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...