Я попал в плохое состояние с моим проектом ASP.Net MVC 5, используя Code-First Entity Framework. Меня не волнует потеря данных, я просто хочу иметь возможность начать все заново, воссоздать базу данных и начать использовать миграцию Code-First.
В настоящее время я нахожусь в состоянии, когда каждая попытка обновления базы данных приводит к возникновению исключения или получению сообщения об ошибке. Также веб-сайт не может получить доступ к базе данных правильно. Как я могу стереть все миграции, воссоздать базу данных и начать с нуля, не создавая новый проект? Другими словами, я хочу сохранить свой код, но удалить базу данных.
Позже я также хочу синхронизировать базу данных развертывания (SQL Server в Azure). Опять же, я не против выбросить все данные - я просто хочу, чтобы они работали.
Пожалуйста, предоставьте любые инструкции, чтобы вернуться в чистое состояние. Очень признателен.
DROP DATABASE
то ....Ответы:
Выполните следующие шаги:
1) Сначала зайдите в обозреватель серверов в Visual Studio, проверьте, подключены ли «.mdf» соединения данных для этого проекта, если так, щелкните правой кнопкой мыши и удалите.
2) Перейдите в Solution Explorer, щелкните значок Показать все файлы.
3) Перейдите в App_Data, щелкните правой кнопкой мыши и удалите все файлы .mdf для этого проекта.
4) Удалите папку Migrations, щелкнув правой кнопкой мыши и удалив.
5) Зайдите в SQL Server Management Studio, убедитесь, что БД для этого проекта не существует, в противном случае удалите ее.
6) Перейдите в консоль диспетчера пакетов в Visual Studio и введите:
Enable-Migrations -Force
Add-Migration init
Update-Database
7) Запустите ваше приложение
Примечание. В шаге 6, часть 3, если появляется сообщение «Не удается прикрепить файл ...», возможно, это связано с тем, что вы полностью не удалили файлы базы данных в SQL Server.
источник
Я хотел бы добавить, что ответ Линя правильный.
Если вы неправильно удалили MDF, вам придется это исправить. Закрепить в проекте резьбовые соединения к МДФ. Короткий ответ; воссоздать и удалить его правильно.
update-database -force
[Применить силу, если это необходимо]Готово, наслаждайтесь вашей новой БД
ОБНОВЛЕНИЕ 11/12/14 - Я использую это все время, когда я делаю изменение дБ. Я обнаружил, что это отличный способ откатить ваши миграции на исходную базу данных:
Запустите обычную миграцию, чтобы вернуть ее к текущей
Update-Database -TargetMigration:0 -force
[Это уничтожит все таблицы и все данные.]Update-Database -force
[используйте силу при необходимости]источник
Это сработало для меня:
источник
В то время как этот вопрос основан на том, что данные не заботятся, иногда обслуживание данных имеет важное значение.
Если это так, я написал список шагов по восстановлению из кошмара Entity Framework, когда в базе данных уже есть таблицы с таким же именем: Как восстановить из кошмара Entity Framework - в базе уже есть таблицы с тем же именем
Видимо ... Модератор счел нужным удалить мой пост, поэтому я вставлю его сюда:
Как восстановить данные из кошмара Entity Framework - в базе данных уже есть таблицы с таким же именем
Описание : Если вы новичок в EF, и вы похожи на нас, вы окажетесь в состоянии, когда вы либо не сможете создать новую локальную базу данных, либо не сможете применить обновления к вашей производственной базе данных. Вы хотите вернуться к чистой среде EF и затем придерживаться основ, но вы не можете. Если вы работаете на производстве, вы не можете создать локальную базу данных, а если вы работаете на локальной, ваш производственный сервер не синхронизируется. И, наконец, вы не хотите удалять данные производственного сервера.
Симптом : не удается запустить Update-Database, поскольку он пытается запустить сценарий создания, а в базе данных уже есть таблицы с тем же именем.
Предпосылки проблемы : EF понимает, где находится текущая база данных, по сравнению с тем, где находится код, основываясь на таблице в базе данных с именем dbo .__ MigrationHistory. Когда он смотрит на сценарии миграции, он пытается согласовать, где он был в последний раз, со сценариями. Если это невозможно, он просто пытается применить их по порядку. Это означает, что он возвращается к исходному сценарию создания, и если вы посмотрите на самую первую часть команды UP, это будет CreeateTable для таблицы, в которой произошла ошибка.
Чтобы понять это более подробно, я бы рекомендовал просмотреть оба видео, на которые есть ссылки здесь: https://msdn.microsoft.com/en-us/library/dn481501(v=vs.113).aspx
Решение : Нам нужно заставить EF думать, что текущая база данных обновлена, не применяя эти команды CreateTable. В то же время мы хотим, чтобы эти команды существовали, чтобы мы могли создавать новые локальные базы данных.
Шаг 1: Чистая производственная база данных Сначала сделайте резервную копию вашей производственной базы данных. В SSMS щелкните правой кнопкой мыши базу данных, выберите «Задачи> Экспортировать приложение уровня данных ...» и следуйте инструкциям. Откройте производственную базу данных и удалите / удалите таблицу dbo .__ MigrationHistory.
Шаг 2. Чистая локальная среда. Откройте папку с миграциями и удалите ее. Я предполагаю, что вы можете получить все это из мерзавца, если это необходимо.
Шаг 3: Воссоздать начальный. В диспетчере пакетов запустите «Enable-Migrations» (EF предложит вам использовать -ContextTypeName, если у вас несколько контекстов). Запустите «Add-Migration Initial -verbose». Это создаст начальный скрипт для создания базы данных с нуля на основе текущего кода. Если у вас были какие-либо начальные операции в предыдущем файле Configuration.cs, скопируйте их.
Шаг 4: Трюк EF. В этот момент, если мы запустим Update-Database , мы получим исходную ошибку. Итак, нам нужно обмануть EF, думая, что он актуален, без выполнения этих команд. Итак, перейдите к методу Up в начальной миграции, которую вы только что создали, и закомментируйте все это.
Шаг 5: Обновление базы данных Если в процессе Up нет кода, который нужно выполнить, EF создаст таблицу dbo .__ MigrationHistory с правильной записью, чтобы сказать, что он правильно выполнил этот скрипт. Иди и проверь, если хочешь. Теперь раскомментируйте этот код и сохраните. Вы можете снова запустить Update-Database, если хотите убедиться, что EF считает, что она обновлена. Он не выполнит шаг Up со всеми командами CreateTable, потому что думает, что это уже сделано.
Шаг 6: Подтвердите, что EF действительно актуален Если у вас был код, к которому еще не применены миграции, это то, что я сделал ...
Запустите «Add-Migration MissingMigrations». Это создаст практически пустой скрипт. Поскольку код уже был там, на самом деле были правильные команды для создания этих таблиц в начальном сценарии миграции, поэтому я просто вырезал CreateTable и эквивалентные команды удаления в методах Up и Down.
Теперь снова запустите Update-Database и посмотрите, как он выполняет ваш новый скрипт миграции, создавая соответствующие таблицы в базе данных.
Шаг 7: Подтвердите и подтвердите. Сборка, тестирование, запуск. Убедитесь, что все работает, затем внесите изменения.
Шаг 8: Сообщите остальным членам вашей команды, как действовать. Когда следующий человек обновится, EF не будет знать, что произошло, поскольку сценарии, которые он выполнял раньше, не существуют. Но, если предположить, что локальные базы данных могут быть снесены и созданы заново, это все хорошо. Им нужно будет удалить свою локальную базу данных и снова создать ее из EF. Если бы у них были локальные изменения и ожидающие миграции, я бы порекомендовал им снова создать свою БД на главном компьютере, переключиться на свою функциональную ветвь и заново создать эти сценарии миграции с нуля.
источник
Просто хочу добавить к отличному ответу @Lin:
5) Б. Если у вас нет SQL Management Studio, перейдите в «Обозреватель объектов SQL Server». Если вы не видите свою базу данных проекта в локальной базе данных «Проводник объектов SQL Server», нажмите кнопку «Добавить сервер SQL», чтобы добавить ее в список вручную. Затем вы можете удалить БД из списка.
источник
Возможно очень простое исправление, которое сработало для меня. После удаления любых ссылок на базы данных и соединений, которые вы найдете в обозревателе серверов / serverobject, щелкните правой кнопкой мыши папку App_Data (для меня не было объектов в приложении) и выберите открыть. После открытия поставить всю базу данных / и т.д. файлы в резервную папку или, если у вас есть мужество, просто удалите их. Запустите ваше приложение, и оно должно воссоздать все с нуля.
источник
Мое решение лучше всего подходит для :
- удаления вашего файла mdf
- хотите воссоздать вашу базу данных.
Чтобы воссоздать вашу базу данных, вам нужно добавить соединение с помощью Visual Studio.
Шаг 1 : Зайдите в Server Explorer, добавьте новое соединение (или найдите значок add db).
Шаг 2 : Изменение Datasource в Microsoft SQL Server Database File .
Шаг 3 : добавьте любое имя базы данных в поле Имя файла базы данных (желательно с тем же именем, которое у вас есть в атрибуте web.config AttachDbFilename ).
Шаг 4 : нажмите кнопку обзора и перейдите туда, где вы хотите, чтобы он был расположен.
Шаг 5 : в консоли диспетчера пакетов выполните команду
update-database
источник