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

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

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

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

Просьба представить какие-либо инструкции, чтобы вернуться в чистое состояние. Очень ценится.

Ответ 1

Следуйте инструкциям ниже:

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

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

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

4) Удалите папку Migrations щелчком правой кнопки мыши и удалите.

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

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

  • Enable-Migrations -Force
  • Add-Migration init
  • Update-Database

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

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

Ответ 2

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

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

  • Создайте новый MDF и назовите его так же, как старый MDF, поместите его в ту же папку. Вы можете создать новый проект и создать новый mdf. МДФ не должен соответствовать вашим старым таблицам, потому что собирался удалить его. Поэтому создайте или скопируйте старый файл в нужную папку.
  • Откройте его в проводнике сервера [дважды щелкните mdf из браузера решений]
  • Удалить его в проводнике сервера
  • Удалить его из обозревателя решений
  • run update-database -force [При необходимости использовать силу]

Готово, наслаждайтесь новым db

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

  • Возвращает db назад к оригиналу
  • Запустите нормальную миграцию, чтобы вернуть ее в текущий

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

Ответ 3

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

  • Удалить базу данных из Обозревателя объектов SQL Server в Visual Studio. Щелкните правой кнопкой мыши и выберите delete.
  • Удалить файлы mdf и ldf из файловой системы - если они все еще существуют.
  • Восстановить решение.
  • Запустить приложение - база данных будет воссоздана.

Ответ 4

Просто хочу добавить отличный ответ @Lin:

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

Ответ 5

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

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

По-видимому... модератор видел, как удалить мой пост, поэтому вставьте его сюда:

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

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

Симптом: не удается запустить Update-Database, потому что он пытается запустить создание script, и в базе данных уже есть таблицы с тем же именем.

Сообщение об ошибке: System.Data.SqlClient.SqlException(0x80131904): Там уже является объектом с именем '' в базе данных.

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

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

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

Шаг 1: Чистая производственная БД Во-первых, сделайте резервную копию своего производственного db. В SSMS щелкните правой кнопкой мыши по базе данных, выберите "Задачи > Экспорт приложений уровня данных..." и следуйте инструкциям. Откройте свою производственную базу данных и удалите/отбросьте таблицу dbo.__ MigrationHistory.

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

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

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

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

Шаг 6: Подтверждение EF НАСТОЯЩИМ обновлено Если у вас был код, который еще не применял миграцию, это то, что я сделал...

Запустите "Миграция без учета миграции" Это создаст практически пустой script. Поскольку код уже был там, на самом деле были правильные команды для создания этих таблиц в начальной миграции script, поэтому я просто сокращал команды CreateTable и эквивалентные команды пересылки в методах Up и Down.

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

Шаг 7: Повторно подтвердите и зафиксируйте. Сборка, тестирование, запуск. Убедитесь, что все выполняется, а затем зафиксируйте изменения.

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

Ответ 6

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

Ответ 7

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

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

Шаг 1. Перейдите к Server Explorer, добавьте новое соединение (или найдите значок добавления db).

Шаг 2: измените Источник данных на Файл базы данных Microsoft SQL Server.

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

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

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