2015-04-30 3 views
1

У меня есть база данных, и случайно я удалил таблицу __MigrationHistory. Теперь программа выдает ошибку, и я не могу потерять все данные. Есть ли способ восстановить таблицу, которую я удалил? Я потеряю всю свою базу данных?Как восстановить базы данных Инструменты миграции EF

Я добавил __MigrationHistory вручную, и теперь это ошибка:

Additional information: Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration

+0

вы можете поймать ошибку, что она бросает , и опубликуйте его, чтобы мы могли знать, что это такое? – Claies

+0

таблица '__MigrationHistory' должна быть проблемой только в том случае, если вы пытаетесь выполнить новую миграцию или автоматически выполняете автоматическую миграцию своей базы данных при каждом запуске. В любом случае, ошибка скажет нам, что нужно изменить. – Claies

+0

Его попытка воссоздать всю базу данных, она говорит, что не может создавать таблицы –

ответ

5

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

  1. Удалить существующие миграции из папки миграции в проекте.
  2. Удалить таблицу __MigrationHistory в базе данных (уже сделано).
  3. Запустите следующую команду в консоли диспетчера пакетов: add-migration Reset. потому что папка миграции не содержит никаких предыдущих миграций, миграция Reset будет полным скриптом моделей в их текущем состоянии. Важно Убедитесь, что этот метод Up соответствует точно текущему состоянию таблицы базы данных.
  4. В миграции Reset, прокомментируйте все в методе Up. Мы не хотим запускать метод Up, потому что база данных уже должна соответствовать этому.
  5. Запустите команду update-database. Это создаст новую таблицу __MigrationHistory и создаст новую строку в таблице, указывая, что база данных соответствует этому этапу миграции Reset. Однако он не будет вносить никаких изменений в базу данных, поскольку метод Up пуст.
  6. (опционально) Удалите комментарии вокруг метода Up в Reset миграции, так что новые базы данных могут быть написаны сценарии к этой точке.
1

Направьте свои скрипты в другую пустую базу данных. Запустите все ваши миграции. Скопируйте таблицу и данные из __MigrationHistory в свою производственную базу данных.

2

Если вы хотите сохранить вашу историю миграции

  1. Если вы оба удалены содержание и структуру _MigrationHistory, создать пустой _MigrationHistory с
CREATE TABLE [dbo].[__MigrationHistory] (
    [MigrationId] NVARCHAR (150) NOT NULL, 
    [ContextKey]  NVARCHAR (300) NOT NULL, 
    [Model]   VARBINARY (MAX) NOT NULL, 
    [ProductVersion] NVARCHAR (32) NOT NULL, 
    CONSTRAINT [PK_dbo.__MigrationHistory] PRIMARY KEY CLUSTERED ([MigrationId] ASC, [ContextKey] ASC) 
); 
  1. Комментарий содержимое в Up() всех ваших файлов кода перенастройки
  2. Запустите команду update-database: он будет наполнять __MigrationHistory, не пытаясь сделать что-нибудь еще
  3. Раскоментируйте что вы комментировали в файлах миграции кода для создания модели дб, когда будет развернут на новой базе
Смежные вопросы