Как повторно создать базу данных для Entity Framework?

Я попал в плохое состояние с моим ASP.Net проект MVC 5, использующий первую в коде Entity Framework. Меня не волнует потеря данных, я просто хочу иметь возможность начать все заново, воссоздать базу данных и начать использовать миграции кода.

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

позже я также хочу синхронизировать базу данных развертывания (SQL Server на Azure). Опять же, я не против отбросить все данные - я просто хочу, чтобы он работал.

пожалуйста, предоставьте любые шаги, чтобы вернуться в чистое состояние. Ценится.

7 ответов


выполните следующие действия:

1) Сначала перейдите в Обозреватель серверов в Visual Studio, проверьте, есть ли ".mdf " подключения к данным для этого проекта подключены, если это так, щелкните правой кнопкой мыши и удалите.

2 )Перейдите в Обозреватель решений, щелкните значок показать все файлы.

3) перейдите в App_Data, щелкните правой кнопкой мыши и удалите все ".МДФ" файлы для этого проекта.

4) удалить папку миграции правой кнопкой мыши и удалить.

5) перейдите в SQL Server Management Studio, сделайте убедитесь, что БД для этого проекта нет, иначе удалите его.

6) перейдите в консоль диспетчера пакетов в Visual Studio и введите:

  1. Enable-Migrations -Force
  2. Add-Migration init
  3. Update-Database

7) запустите приложение

Примечание: на шаге 6 Часть 3, Если вы получаете сообщение об ошибке " не удается прикрепить файл..."возможно, это потому, что вы не удалили файлы базы данных полностью в SQL Server.


Я хотел бы добавить, что ответ Лина правильный.

Если вы неправильно удалите MDF, вам придется его исправить. Исправить привинченные соединения в проекте к MDF. Короткий ответ; воссоздать и удалить его должным образом.

  1. создайте новый MDF и назовите его так же, как старый MDF, поместите его в ту же папку. Вы можете создать новый проект и создать новый mdf. Mdf не должен соответствовать вашим старым таблицам, потому что собирался удалить его. Так создайте или скопируйте старый в нужную папку.
  2. откройте его в обозревателе серверов [дважды щелкните mdf из Обозревателя решений]
  3. удалить его в обозревателе сервера
  4. удалить его из Обозревателя решений
  5. run update-database -force [при необходимости применить силу]

готово, наслаждайтесь новой db

обновление 11/12/14 - я использую это все время, когда я делаю нарушение изменения БД. Я понял, что это отличный способ вернуть тебя. миграция в исходную БД:

  • возвращает БД в исходное состояние
  • запустите обычную миграцию, чтобы вернуть ее в текущий

    1. Update-Database -TargetMigration:0 -force [Это уничтожит все таблицы и все данные.]
    2. Update-Database -force [при необходимости применить силу]

Это сработало для меня:

  1. удалить базу данных из Обозревателя объектов SQL Server в Visual Studio. Щелкните правой кнопкой мыши и выберите Удалить.
  2. удалить файлы mdf и ldf из файловой системы - если они все еще там.
  3. Перестроить Решение.
  4. запустить приложение - база данных будет создана заново.

хотя этот вопрос основан на не заботясь о данных, иногда поддержание данных имеет важное значение.

Если да, то я написал список шагов по восстановлению из кошмара Entity Framework, когда в базе данных уже есть таблицы с тем же именем: как восстановить из Entity Framework кошмар-база данных уже имеет таблицы с тем же именем

видимо... модератор счел нужным удалить мой пост, поэтому я вставлю его здесь:

Как восстановить из Entity Framework кошмар-база данных уже имеет таблицы с тем же именем

описание: если вы похожи на нас, когда ваша команда новичок в EF, вы окажетесь в состоянии, когда вы либо не можете создать новую локальную базу данных, либо не можете применить обновления к рабочей базе данных. Вы хотите вернуться к чистой среде EF, а затем придерживаться основ, но вы не можете. Если вы заставите его работать для производства, вы не сможете создать локальный db, и если вы заставите его работать для локального, ваш рабочий сервер выйдет из синхронизации. И, наконец, вы не хотите удалять данные производственного сервера.

симптом: не могу запустить Обновление-Базы Данных потому что он пытается запустить сценарий создания, и база данных уже имеет таблицы с тем же именем.

Сообщение Об Ошибке: Система.Данные.В sqlclient.SqlException (0x80131904): есть уже является объектом с именем " in the база данных.

Фон: EF понимает, где находится текущая база данных по сравнению с тем, где находится код на основе таблицы в базе данных с именем dbo.__MigrationHistory. Когда он смотрит на сценарии миграции, он пытается восстановить, где он был в последний раз со сценариями. Если он не может, он просто пытается применить их по порядку. Это означает, что он возвращается к исходному скрипту создания, и если вы посмотрите на самую первую часть команды UP, это будет CreeateTable для таблицы, в которой произошла ошибка.

чтобы понять это более подробно, я бы рекомендовал смотреть оба видео, на которые ссылаются здесь: https://msdn.microsoft.com/en-us/library/dn481501 (v=против 113).aspx

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

Шаг 1: производство DB clean Сначала создайте резервную копию рабочей БД. В SSMS, щелкните правой кнопкой мыши на базе данных, выберите "задачи" > " экспорт приложения уровня данных...- и следуй подсказкам. Откройте рабочую базу данных и удалите/удалите dbo._Таблица _MigrationHistory.

Шаг 2: локальная среда clean Откройте папку миграции и удалите ее. Я предполагаю, что вы можете получить все это от git, если необходимый.

Шаг 3: Воссоздать Начальный В Диспетчере пакетов запустите "Enable-Migrations" (EF предложит вам использовать-ContextTypeName, если у вас несколько контекстов). Запустите"Add-Migration Initial-verbose". Это создаст исходный скрипт для создания базы данных с нуля на основе текущего кода. Если у вас были какие-либо операции seed в предыдущей конфигурации.CS, затем скопировать, что поперек.

Шаг 4: трюк EF В этот момент, если бы мы побежали Обновление-Базы Данных, мы получим исходную ошибку. Итак, нам нужно обмануть EF, думая, что он обновлен, без запуска этих команд. Итак, перейдите в метод Up в начальной миграции, которую вы только что создали, и прокомментируйте все это.

Шаг 5: Обновление Базы Данных Без кода для выполнения в процессе Up EF создаст dbo.__migrationhistory таблица с правильной записью, чтобы сказать, что он правильно запустил этот скрипт. Пойти и проверьте, если хотите. Теперь раскомментируйте этот код и сохраните. Вы можете запустить Обновление-Базы Данных еще раз, если вы хотите проверить, что EF думает, что это в актуальном состоянии. Он не будет запускать шаг вверх со всеми командами CreateTable, потому что он думает, что уже сделал это.

Шаг 6: подтвердите, что EF действительно обновлен Если у вас был код, к которому еще не применялись миграции, это то, что я сделал...

Выполнить " Add-Migration MissingMigrations" Это создаст практически пустой скрипт. Поскольку код уже был там, на самом деле были правильные команды для создания этих таблиц в исходном скрипте миграции, поэтому я просто вырезал CreateTable и эквивалентные команды drop в методы Up и Down.

теперь Обновление-Базы Данных еще раз и посмотрите, как он выполняет ваш новый сценарий миграции, создавая соответствующие таблицы в базе данных.

шаг 7: повторное подтверждение и фиксация. Строить, тестировать. Убедитесь, что все запущено, а затем зафиксируйте изменения.

Шаг 8: Пусть ваша команда знает, как действовать дальше. Когда рядом человек обновления, эф не знает, что это учитывая, что скрипты он бежал пока не существует. Но, предполагая, что локальные базы данных могут быть взорваны и воссозданы, все это хорошо. Им нужно будет удалить локальную базу данных и снова добавить ее из EF. Если бы у них были местные изменения и ожидающие миграции я бы рекомендовал им снова создать свою БД на master, переключиться на свою ветвь функций и воссоздать эти сценарии миграции с нуля.


просто хочу добавить к отличному ответу @Lin:

5) Б. Если у вас нет SQL Management Studio, перейдите в раздел "Обозреватель объектов SQL Server". Если вы не видите свою БД проекта в localdb "Обозреватель объектов SQL Server", нажмите кнопку "Добавить SQL server", чтобы добавить ее в список вручную. Затем вы можете удалить БД из списка.


возможное очень простое исправление, которое сработало для меня. После удаления любых ссылок на базы данных и соединений, которые вы найдете в server/serverobject explorer, щелкните правой кнопкой мыши папку App_Data (не показывал никаких объектов в приложении для меня) и выберите Открыть. После открытия поместите всю базу данных / etc. файлы в папке резервного копирования или если у вас есть кишки, просто удалите их. Запустите приложение, и оно должно воссоздать все с нуля.


мое решение лучше всего подходит для :
- удален файл mdf
- хотите воссоздать свою БД.

для того чтобы пересоздать базу данных необходимо добавить соединение с помощью Visual Studio.

Шаг 1: перейдите в Обозреватель серверов добавить новое соединение (или найдите значок Добавить БД).

Шаг 2 : изменить источник to Microsoft SQL Server Файл Базы Данных.

Шаг 3: добавьте любое имя базы данных, которое вы хотите в имя файла базы данных поле.(предпочтительно то же имя, что и в интернете.config ключевое слово attachdbfilename)

Шаг 4 : нажмите кнопку Обзор и перейдите в папку, где будет располагаться.

Шаг 5 : в консоли диспетчера пакетов выполните команду update-database