Подтвердить что ты не робот

Как заставить EF-код сначала воссоздать базы данных?

У меня была куча таблиц Code First created.

Затем в SQL я удалил одну таблицу, чтобы я мог неизбежно задать этот вопрос в стеке.

При использовании update-database в консоли управления пакетами я получаю:

Не удается найти объект "dbo.ContractParents", потому что он не существует или у вас нет прав.

Каков наилучший способ воссоздать мою таблицу?

Я прочитал о context.Database.CreateIfNotExists();

Я помещал его в свою функцию семени, но ничего не делал.

Спасибо!

4b9b3361

Ответ 1

Чтобы объяснить, что происходит с вашей командой update-database и почему метод context.Database.CreateIfNotExists() в семени не работал:

Когда вы запускаете команду update-database, она сначала смотрит на вашу строку подключения, чтобы узнать, есть ли база данных. Если он просматривает таблицу истории миграции и проверяет ее на то, что находится в вашем классе DbContext. Если он видит, что таблицы отсутствуют или изменяется, он попытается обновить базу данных. Метод Seed не вызывается до тех пор, пока это не будет сделано, поэтому это не сработало.

При разработке с использованием EF-кода Сначала я обычно подхожу к проблеме несколькими способами, в зависимости от того, насколько велика моя база данных. Обычно я шел по пути удаления всех таблиц (включая таблицу истории миграции), а затем снова запускал команду update-database. Отлично работает, просто очень много времени, если у вас много таблиц с большим количеством ограничений FK на нем.

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

Элегантное решение? Нет. Это работает? Более-менее...

Ответ 2

Для еще одного дрянного варианта...

Щелкните правой кнопкой мыши на своем db в проводнике сервера и нажмите delete Затем вы можете сделать

Enable-Migrations -EnableAutomaticMigrations -Force

Update-Database -Force

Грязное обновление, чистый результат:)

Ответ 3

Для быстрого и грязного подхода, это приведет вас домой на ужин вовремя вместе с большим количеством dataloss (я все еще в бета-версии с использованием тестовых данных)

удалить таблицу dbo.__ MigrationHistory system

вместе со всеми вашими другими таблицами.

Сначала создайте резервные копии данных!

update-database -verbose (вам может понадобиться соус с вашими спагетти)

Я не впечатлен, но он работает.

Надеюсь, кто-то придумает лучший ответ в будущем.

Это поможет лучше понять миграцию.