Хоча це запитання випливає з того, що не піклується про дані, інколи важливим є підтримка даних.
Якщо так, я написав список кроків щодо того, як відновитись з кошмару Entity Framework, коли в базі даних вже є таблиці з таким самим іменем: Як відновитись з кошмару Entity Framework - у базі даних вже є таблиці з такою ж назвою
Мабуть ... модератор вважав за потрібне видалити свою публікацію, тому я вставлю її сюди:
Як відновити кошмар від Entity Framework - у базі даних вже є таблиці з такою ж назвою
Опис : Якщо ви схожі на нас, коли ваша команда новачка в EF, ви опинитеся в стані, коли ви не можете створити нову локальну базу даних або не можете застосувати оновлення до вашої виробничої бази. Ви хочете повернутися до чистого середовища EF, а потім дотримуватися основ, але не можете. Якщо ви працюєте на виробництві, ви не можете створити локальний db, а якщо ви працюєте для локального, ваш виробничий сервер виходить із синхронізації. І нарешті, ви не хочете видаляти дані виробничого сервера.
Ознака : Неможливо запустити Update-Database, оскільки він намагається запустити сценарій створення, а база даних вже має таблиці з тим самим іменем.
Повідомлення про помилку: System.Data.SqlClient.SqlException (0x80131904): В базі даних вже є об’єкт з назвою ''.
Фон проблеми : EF розуміє, де знаходиться поточна база даних порівняно з тим, де знаходиться код, базуючись на таблиці в базі даних, що називається dbo .__ MigrationHistory. Коли він дивиться на сценарії міграції, він намагається переглянути місце, де він останній раз був за допомогою сценаріїв. Якщо це не вдається, він просто намагається застосувати їх до порядку. Це означає, що він повертається до початкового сценарію створення, і якщо ви подивитеся на першу частину команди UP, це буде CreeateTable для таблиці, на якій сталася помилка.
Щоб зрозуміти це детальніше, рекомендую переглянути обидва відео, на які посилається тут:
https://msdn.microsoft.com/en-us/library/dn481501(v=vs.113).aspx
Рішення : Що нам потрібно зробити, це навести фокус EF на думку про те, що поточна база даних оновлена, не застосовуючи ці команди CreateTable. У той же час, ми все ще хочемо, щоб ці команди існували, щоб ми могли створювати нові локальні бази даних.
Крок 1. Очистіть виробничу БД
Спочатку зробіть резервну копію виробничого дБ. У SSMS клацніть правою кнопкою миші на базі даних, виберіть "Завдання> Експорт додатка рівня даних ..." та дотримуйтесь підказок. Відкрийте свою виробничу базу даних та видаліть / видаліть таблицю dbo .__ MigrationHistory.
Крок 2. Очищення локального середовища
Відкрийте папку міграцій та видаліть її. Я припускаю, що ви можете отримати все це від git, якщо це необхідно.
Крок 3: Відтворіть початкове
в диспетчері пакунків запустіть "Увімкнути-міграцію" (EF запропонує вам використовувати -ContextTypeName, якщо у вас є кілька контекстів). Виконайте "Початкова добавка-міграція -вербоза". Це створить початковий сценарій для створення бази даних з нуля на основі поточного коду. Якщо у вас були якісь операції з насінням у попередньому Configuration.cs, скопіюйте це впоперек.
Крок 4: Хитрість EF.
На цьому етапі, якщо ми запустили Update-Database , ми отримаємо початкову помилку. Отже, нам потрібно обдурити EF, думаючи, що це актуально, без виконання цих команд. Отже, перейдіть до методу Up в початковій міграції, яку ви тільки що створили, і прокоментуйте все це.
Крок 5: Оновлення бази даних
Без коду, який потрібно виконати в процесі оновлення , EF створить таблицю dbo .__ MigrationHistory з правильним записом, щоб сказати, що він правильно запустив цей скрипт. Зайдіть і перевірте це, якщо вам подобається. Тепер розкоптуйте цей код і збережіть. Ви можете запустити Update-Database ще раз, якщо хочете перевірити, чи вважає EF його актуальним. Він не запустить крок вгору з усіма командами CreateTable, оскільки вважає, що це вже зроблено.
Крок 6. Підтвердьте, що EF актуально актуальний
Якщо у вас був код, до якого ще не було застосовано міграцій, це я зробив ...
Запустіть "Add-Migration MissingMigrations" Це створить практично порожній сценарій. Оскільки код вже був там, насправді були правильні команди для створення цих таблиць у початковому сценарії міграції, тому я просто вирізав команди CreateTable та еквівалентні команди "drop" на методи Вгору та Вниз.
Тепер знову запустіть Update-Database і спостерігайте, як він виконує ваш новий сценарій міграції, створюючи відповідні таблиці в базі даних.
Крок 7: Повторіть підтвердження та введіть.
Будувати, тестувати, запускати Переконайтесь, що все працює, а потім введіть зміни.
Крок 8: Нехай решта вашої команди знає, як діяти.
Коли наступна особа оновиться, EF не дізнається, на що потрапило, враховуючи, що сценарії, які вона виконувала раніше, не існують. Але, якщо припустити, що локальні бази даних можуть бути підірвані та відтворені, це все добре. Їм потрібно буде знову скинути свою локальну базу даних і додати її створити з EF. Якщо у них були місцеві зміни та міграції, що очікують, я рекомендую їм знову створити свій БД на головному, переключитися на свою гілку функцій та заново створити ці сценарії міграції з нуля.
DROP DATABASE
тоді ....