Как заново создать базу данных для Entity Framework?
Я попал в плохое состояние с моим ASP.Net проект MVC 5, использующий Code-First Entity Framework. Я не беспокоюсь о потере данных, я просто хочу иметь возможность начать все заново, воссоздать базу данных и начать использовать миграции с использованием кода.
В настоящее время я нахожусь в состоянии, когда каждая попытка обновить базу данных приводит к возникновению исключения или получению сообщения об ошибке. Кроме того, веб-сайт не может правильно получить доступ к базе данных. Как я могу стереть все миграции, заново создать базу данных и запустить с нуля, без необходимости создавать новый проект? Другими словами, Я хочу сохранить свой код, но удалить базу данных.
Позже я также хочу синхронизировать базу данных развертывания (SQL Server в Azure). Опять же, я не против отбросить все данные - я просто хочу, чтобы это работало.
Пожалуйста, укажите все необходимые шаги, чтобы вернуться в чистое состояние. Очень признателен.
7 ответов:
Выполните следующие действия:
1) Сначала перейдите в Обозреватель серверов в Visual Studio, проверьте, есть ли ".mdf " подключения к данным для этого проекта подключены, если это так, щелкните правой кнопкой мыши и удалите.
2) Перейдите в Обозреватель решений, щелкните значок показать все файлы.
3) перейдите в App_Data, щелкните правой кнопкой мыши и удалите все ".mdf " файлы для этого проекта.
4) удалите папку миграции, щелкнув правой кнопкой мыши и удалить. 5) перейдите в SQL Server Management Studio, убедитесь, что база данных для этого проекта не там, в противном случае удалите его. 6) перейдите в консоль диспетчера пакетов в Visual Studio и введите:
Enable-Migrations -ForceAdd-Migration initUpdate-Database7) запустите приложение
Примечание: на шаге 6 Часть 3, Если вы получаете сообщение об ошибке " не удается прикрепить файл...", это, возможно, потому, что вы не удалили файлы базы данных полностью в SQL Server.
Я хотел бы добавить, что ответ Лина верен.
Если вы неправильно удалите МДФ, вам придется его исправить. Чтобы исправить завинченные соединения в проекте с МДФ. Короткий ответ; воссоздать и удалить его должным образом.
- создайте новый MDF и назовите его так же, как старый MDF, поместите его в ту же папку. Вы можете создать новый проект и создать новый МДФ. МДФ не должен соответствовать вашим старым таблицам, потому что собирался удалить его. Так что создайте или скопируйте старый - в нужную папку.
- откройте его в обозревателе серверов [дважды щелкните mdf из Обозревателя решений]
- удалите его в обозревателе серверов
- удалите его из Обозревателя решений
- выполнить
update-database -force[применить силу, если это необходимо]Готово, наслаждайтесь вашим новым db
UPDATE 11/12/14-я использую это все время, когда я делаю разрушающее изменение БД. Я обнаружил, что это отличный способ откатить ваши миграции в исходную БД:
- возвращает БД в исходное состояние. оригинал
Запустите нормальную миграцию, чтобы вернуть ее в текущее состояние
Update-Database -TargetMigration:0 -force[Это уничтожит все таблицы и все данные.]Update-Database -force[при необходимости применить силу]
Это сработало для меня:
- удалить базу данных из Обозревателя объектов SQL Server в Visual Studio. Щелкните правой кнопкой мыши и выберите Удалить.
- удалите файлы mdf и ldf из файловой системы-если они все еще там.
- Перестроить Решение.
- Запуск приложения-база данных будет создана заново.
В то время как этот вопрос основан на том, что не заботятся о данных, иногда поддержание данных имеет важное значение.
Если это так, я написал список шагов по восстановлению из Entity Framework nightmare, когда в базе данных уже есть таблицы с тем же именем здесь: Как восстановить из Entity Framework nightmare-в базе данных уже есть таблицы с тем же именем
Очевидно... модератор счел нужным удалить мой пост, поэтому я вставлю его сюда:
Как восстановиться от Entity Framework nightmare-база данных уже имеет таблицы с тем же именем
Описание : Если вы похожи на нас, когда ваша команда является новичком в EF, вы окажетесь в состоянии, в котором вы либо не можете создать новую локальную базу данных, либо не можете применить обновления к своей производственной базе данных. Вы хотите, чтобы вернуться к чистой окружающей среде эф и затем придерживаться основ, но вы не можете. Если вы заставить его работать на производстве, вы не можете создать локальную БД, и если вы будете работать за местных, вашего производства сервер выходит из синхронизации. И, наконец,вы не хотите удалять данные с рабочего сервера.
Симптом : не могу бежать обновление-база данных потому что он пытается запустить сценарий создания, а в базе данных уже есть таблицы с тем же именем.
Сообщение Об Ошибке: Система.Данные.В sqlclient.SqlException (0x80131904): есть уже есть объект с именем " в базе данных.
Фон задачи : EF понимает, где текущий база данных at сравнивается с тем, где код at основан на таблице в базе данных, называемой dbo.__MigrationHistory. Когда он смотрит на сценарии миграции, он пытается восстановить, где он был в последний раз со сценариями. Если это не удается, он просто пытается применить их по порядку. Это означает, что он возвращается к первоначальному сценарию создания, и если вы посмотрите на самую первую часть команды UP, это будет CreeateTable для таблицы, в которой произошла ошибка.
Чтобы понять это более подробно, Я бы рекомендовал посмотреть оба видео, на которые ссылаются здесь: https://msdn.microsoft.com/en-us/library/dn481501 (v=против 113).aspx
Решение : что нам нужно сделать, так это заставить EF думать, что текущая база данных обновлена, не применяя эти команды CreateTable. В то же время мы все еще хотим, чтобы эти команды существовали, чтобы мы могли создавать новые локальные базы данных.
Шаг 1: производство DB clean Во-первых, сделайте резервную копию вашей производственной базы данных. В SSMS, Щелкните правой кнопкой мыши на базе данных, выберите " задачи > экспорт данных-уровень приложения...- и следуйте подсказкам. Откройте базу данных и удалить/падение ДБО._Таблица migrationhistory.
Шаг 2: локальная среда чистая Откройте папку миграции и удалите ее. Я предполагаю, что вы можете получить все это обратно от Гита, если это необходимо.
Шаг 3: Воссоздать Начальный В Диспетчере пакетов выполните команду "Enable-Migrations" (EF предложит вам использовать-ContextTypeName, если у вас есть несколько контекстов). Запустите команду "Add-Migration Initial-verbose". Это создаст исходный сценарий для создания базы данных с нуля на основе текущего кода. Если у вас были какие-либо начальные операции в предыдущей конфигурации.КС, тогда скопируй это поперек.
Шаг 4: трюк EF В этот момент, если бы мы бежали обновление-база данных, мы получим исходную ошибку. Таким образом, мы должны обмануть EF, думая, что он обновлен, не выполняя эти команды. Итак, идите в АП метод в начальной миграции вы только что создали и прокомментировали все это.
Шаг 5: Обновление Базы Данных При отсутствии кода для выполнения в процессе Up EF создаст dbo.__MigrationHistory таблица с правильной записью, чтобы сказать, что он выполнил этот скрипт правильно. Сходи и посмотри, если хочешь. Теперь раскомментируйте этот код и сохраните. Вы можете бежать обновление-база данных опять же, если вы хотите проверить, что EF считает его актуальным. Он не побежит вверх по ступеньке со всеми CreateTable команды, потому что он думает, что он уже сделал это.
Шаг 6: подтвердите, что EF действительно обновлен Если у вас был код, к которому еще не были применены миграции, это то, что я сделал...
Выполнить " Add-Migration MissingMigrations" Это создаст практически пустой сценарий. Поскольку код уже был там, на самом деле были правильные команды для создания этих таблиц в исходном сценарии миграции, поэтому я просто вырезал CreateTable и эквивалентные команды drop в методы "вверх-вниз".
А теперь беги. обновление-база данных снова и снова наблюдайте, как он выполняет ваш новый сценарий миграции, создавая соответствующие таблицы в базе данных.
Шаг 7: повторное подтверждение и фиксация. Строить, тестировать. Убедитесь, что все запущено, а затем зафиксируйте изменения.
Шаг 8: Пусть остальная часть вашей команды знает, как действовать. Когда следующий человек обновит, EF не будет знать, что ударило его, учитывая, что сценарии, которые он запускал раньше не существует. Но, предполагая, что локальные базы данных могут быть взорваны и воссозданы, это все хорошо. Им придется отказаться от их локальной базе данных и добавить его эф снова. Если у них были локальные изменения и ожидающие миграции, я бы рекомендовал им снова создать свою БД на master, переключиться на свою ветвь функций и заново создать эти сценарии миграции с нуля.
Просто хочу добавить к превосходному ответу @Lin:
5) В. Если у вас нет среды SQL Management Studio, перейдите в раздел "Обозреватель объектов SQL Server". Если вы не можете увидеть свою проектную базу данных в localdb "Обозреватель объектов SQL Server", нажмите кнопку "Добавить SQL server", чтобы добавить ее в список вручную. Затем вы можете удалить БД из списка.
Возможное очень простое исправление, которое сработало для меня. После удаления всех ссылок на базы данных и соединений, найденных в обозревателе серверов/serverobject explorer, щелкните правой кнопкой мыши папку App_Data (не показывал никаких объектов в приложении для меня) и выберите Открыть. После открытия ставим все базы данных/etc. файлы в папке резервного копирования или, если у вас есть мужество, просто удалите их. Запустите приложение, и оно должно воссоздать все с нуля.
Мое решение лучше всего подходит для :
- удалил ваш mdf файл
- хотите воссоздать свою БД.Чтобы воссоздать базу данных, Необходимо добавить соединение с помощью Visual Studio.
Шаг 1: перейдите в Обозреватель серверов добавить новое соединение (или найдите значок Добавить БД).
Шаг 2 : Измените Источник данных на файл базы данных Microsoft SQL Server.
Шаг 3: добавьте любую базу данных имя, которое вы хотите получить в поле Имя файла базы данных .(желательно то же имя, что и у вас в сети.config AttachDbFilename атрибут)
Шаг 4: Нажмите кнопку Обзор и перейдите туда, где вы хотите, чтобы он был расположен.
Шаг 5 : в консоли диспетчера пакетов выполните команду
update-database
Comments