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


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

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

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

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

7 124

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, вам придется его исправить. Чтобы исправить завинченные соединения в проекте с МДФ. Короткий ответ; воссоздать и удалить его правильно.

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

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

обновление 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, вы окажетесь в состоянии, когда вы либо не можете создать новую локальную базу данных, либо не можете применить обновления к своей производственной базе данных. Вы хотите, чтобы вернуться к чистой окружающей среде эф и затем придерживаться основ, но вы не можете. Если вы заставить его работать на производстве, вы не можете создать локальную БД, и если вы получаете его работу для локального, ваш рабочий сервер выходит из синхронизации. И, наконец, вы не хотите удалять данные рабочего сервера.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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