2016-12-26 6 views
3

У меня есть тест и live db. Для тестирования db-миграций я использую синтаксис Add-Migration ... и Update-Database в консоли диспетчера пакетов. Но для live db я хочу сделать это программно, когда приложение запущено.Entity Framework Core применяет миграцию программно

Следующий код не помог мне:

context.Database.Migrate(); 

У меня есть ошибка Invalid object name 'TempTenants', когда я пытаюсь добавить запись в таблицу, которая не существует. Это моя новая таблица.

Но у меня есть _EFMigrationsHistory стол. И есть все мои миграции, даже те, которые не применялись. Но я не вижу новую таблицу.

У меня будет тот же результат, если я вручную удалю таблицу из теста db и попытаюсь воспроизвести ошибку.

Итак, context.Database.Migrate(); создает только новый db со всеми миграциями, если он не существует, но не обновляет (применять миграции) существующий db.

Могу ли я это сделать? И как я могу это разрешить?

+0

Пожалуйста, уточните, что «это меня не помогло». Зачем? Что случилось? Сообщение об ошибке? Также был создан ваш db, также созданный миграциями (есть ли таблица '__EFMigrationsHistory')? – Tseng

+0

@Tseng Я обновил свой вопрос, посмотри на него, пожалуйста. –

+0

Исключение во время запуска? Что читают журналы? Имеет ли пользователь достаточные права на запись на сервере базы данных? (ALTER/CREATE) – Tseng

ответ

1

Кажется, что-то пошло не так. Я удалил непримененные миграции (записи) из таблицы __EFMigrationsHistory (также мне нужно было вернуть некоторые имена таблиц, первичные и внешние ключи в предыдущее состояние) и снова запустить приложение.

Таким образом, context.Database.Migrate(); применяют миграции даже для существующих баз данных.