Неможливо створити явну міграцію в рамках сутності


96

Я додаю нову міграцію, але це повідомлення показує:

Неможливо створити явну міграцію, оскільки очікуються такі явні міграції: [201203170856167_left]. Застосуйте очікувані явні міграції, перш ніж намагатися створити нову явну міграцію.

Чи може мені хтось допомогти?


11
Це трапилося зі мною, коли я випадково переключив свій стартап-проект на інший. Ви (або інші, хто це читає), можливо, захочете перевірити це швидко, перш ніж спробувати ще більше глибокої зйомки неполадок (особливо тих, де вам потрібно почати видалення міграцій тощо).
NicholasFolk

У каталозі Міграції є клас міграції, який не оновлюється в _MigrationHistory бази даних. Видалення цього класу з однаковим станом як у каталозі міграції, так і в базі даних вирішило мою проблему.
Aryan Firouzian

1
Це трапляється зі мною випадково. Коли це трапляється, це показує, що всі мої міграції потрібно застосовувати. Мені потрібно перезапустити Visual Studio, щоб він запрацював, оскільки я вже все налаштував належним чином.
Ларрі Флеувеллінг,

Відповіді:


81

Це повідомляє вам, що у вашому додатку є деяка необроблена міграція, і вона вимагає запуску, Update-Databaseперш ніж ви зможете додати іншу міграцію.


12
Що я хочу створити для початкової міграції? Це заважає вам робити це?
Ребекка

Не працював у мене, Update-Database просто дав мені чергову помилку. Спочатку мені довелося видалити очікувані файли.
Vahx

1
Відповідь Томаса була корисною для мого подібного випадку.
Тарек Шавадфі

2
Можливо, буде потрібно оголосити стартап-проект-StartupProject ContentHub.Database
osanger

2
Update-Databaseдає> Неможливо оновити базу даних, щоб відповідати поточній моделі, оскільки там очікуються зміни
ASpirin

53

У мене була така ж проблема. Очевидно, фреймворк сутності генерує цю помилку, коли не вдається підключитися до бази даних. Тож переконайтеся, що зможете отримати до нього доступ, перш ніж шукати інші проблеми.


1
Я також додам, що це було б у випадку, коли ви переміщуєте свій App.config в інший проект або якщо він просто відсутній у вашому проекті або якщо він є у вашому проекті, але налаштований неправильно.
Код Маверік

Я отримав цю саму помилку після того, як мій IP змінився (це сталося як після перемикання місцеположення, так і після зміни dn dns). Це спричинило брандмауер у базі даних Azure, яку ми використовуємо для скасування входу. Невдало міграція EF дає вищевказану помилку замість "не вдалося ввійти" ...
Віктор

8
Ще один момент, який я хотів би зробити, - переконатися, що ваш проект запуску відповідає рівню зв’язку вашого контексту db. У мене була ця проблема, коли я тимчасово змінив свій стартовий проект і не зрозумів, що інший проект не має того самого рядка підключення.
Gage Trader

Додавання до @GageTrader: У мене було кілька стартових проектів, один без конфігурації та веб-проект з EF-конфігурацією. проект (Repository) з міграціями має таку саму конфігурацію EF у своєму app.config, що і веб-проект. але навіть коли я вибрав проект сховища як проект запуску, це не спрацювало, але коли я встановив веб-проект для запуску, він це зробив.
JimiSweden

Мені довелося чітко вказати параметр -ConnectionString, який зробив для мене хитрість
Брайан Колавіто

34

Вам потрібно запустити "update-database" з консолі диспетчера пакунків, щоб змінити базу даних. АБО ви можете видалити очікуваний файл міграції ([201203170856167_left]) зі своєї папки Migrations та повторно запустити "add-migration" у створити нову міграцію на основі ваших змін.


1
Я видалив файл міграції та запустив додаток-міграцію, але він все одно видає ту саму помилку.
nu everest

2
Дякуємо, підказкою щодо видалення очікуваного файлу міграції було порятунок
Manish

31

Ця помилка також може означати, що міграції більше не розпізнаються. Це трапилось зі мною після зміни значення ContextKey в Migrations.Configuration. Рішенням було просто оновити ContextKey в таблиці бази даних "__MigrationHistory" (або повернути значення в класі конфігурації, я думаю). ContextKey та простір імен у вашій програмі повинні збігатися.


1
Це була правильна відповідь для моєї справи. Оскільки я використовував один зі своїх старих проектів для нового подібного проекту, я не зміг внести зміни до БД через старі міграції. Як запропонував Томас, простір імен відрізнявся від міграцій від контексту в таблиці _MigrationsHistory, що спричинило невпізнання старих міграцій.
Тарек Шавадфі

1
Це допомогло мені, оскільки я спричинив проблему, перейменувавши рішення. У процесі я перейменував ContextKey, щоб він більше не відповідав записам _MigrationHistory.
Джоель

Також працював для мене, встановив явний контекстний ключ у конфігурації, змінив його в __MigrationHistory та update-database вирішив, що все круто. Дякую!
Джеймс Уайт

2
Смішно, але це правильно. Якщо ви оновили назву проекту, або якщо ви розділили проект (мій випадок) на декілька, і ви намагаєтесь додати нову міграцію з нового проекту до того ж db, ви повинні використовувати правильний ContextKey, ви можете встановити його в конструкторі Configuration ( вам потрібно використовувати ключ контексту, який ви маєте в таблиці __MigrationHistory в цільовій БД)
BotanMan

тут же я перейменував простір імен за замовчуванням і замінив його протягом усього рішення, яке спричинило цю проблему
WtFudgE

18

1. Рядок підключення / дозвіл на з'єднання

Перевірте рядок з'єднання ще раз.

Переконайтеся, що користувач, з яким ви з'єднуєтесь, все ще має дозвіл на читання [__MigrationHistory]та має дозвіл на редагування схеми.

Ви також можете спробувати змінити рядок підключення у файлі конфігурації програми або Інтернету, щоб використовувати інтегровану безпеку (автентифікація Windows) для запуску команди додавання-переміщення як вас самого .

Наприклад:

connectionString="data source=server;initial catalog=db;persist security info=True;Integrated Security=SSPI;" 

Цей рядок підключення міститиме файл App.config проекту, де знаходиться DbContext.

2. Проект StartUp

Ви можете вказати проект StartUp у командному рядку, або можете клацнути проект правою кнопкою миші за допомогою папок DbContext, Configurationта Migrations та вибрати Встановити як проект StartUp . Я серйозно кажучи, це насправді може допомогти.

введіть тут опис зображення


Ха-ха. Я хотів би, щоб це набрало більше голосів. Це трапляється зі мною багато, і Integrated Securityвиправлення чудово працює!
Джес

1
У мене була та сама проблема, жодна з команд міграції не працювала. Виявляється, виною тому було не встановлення стартового проекту. Налаштування, що вирішило мою проблему.
Вішаль

Зміна стартап-проекту мені допомогла! Я був впевнений, що це не спрацює, але я все-таки спробував, оскільки все інше не вдалося. Чудова відповідь.
Сильвен

"Встановити як запуск" - ніколи б не здогадався! Дякую!!
Jasel

1
Так, я навмисно змінив стартовий проект і забув змінити його назад. І смішно те, що одна міграція раніше була виконана з належним запусковим проектом, тому все працювало нормально. Але це логічно зараз - b / c EF бере з проекту рядок підключення, отже, він "не знає", що міграції насправді вже застосовані до БД ...
kosist

8

Мав таку ж проблему і міг її вирішити за допомогою декількох натяків на відповіді вище:

  • У консолі менеджера пакетів перевірте проект за замовчуванням (вкажіть на проект із конфігурацією міграції
  • Переконайтеся, що startup-proj має web.config з дійсним stringstring (або
  • Переконайтеся, що проект із міграціями має app.config / web.config з дійсним рядком підключення
  • Перевірка дозволів у БД (для користувача, налаштованого у вас у рядку підключення)

Використовуйте "update-database -verbose" в консолі диспетчера пакунків, щоб отримати більш конкретну інформацію, де міграції намагаються підключитися. (Допоміг у моєму випадку з’ясувати, що мій стартовий проект був встановлений неправильно ...)


2
запустив "update-database -verbose" і помітив, що мій рядок з'єднання порушений, ха-ха. Тож команда add-migration видає неправильне повідомлення.
Вахберн,

4
"Переконайтеся, що startup-proj {...}" вирішив мою проблему. Спасибі @flex
Andy Schmitt

7

Якщо ви не використовували їх, Update-Databaseви можете просто видалити його. Якщо ви запустили оновлення, поверніть його назад за допомогоюUpdate-Database -TargetMigration "NameOfPreviousMigration" , а потім видаліть.

Довідка: http://elegantcode.com/2012/04/12/entity-framework-migrations-tips/

Я скопіював цей текст прямо звідси: Як скасувати останню команду Додавання міграції?


7

Зіткнувшись з цією проблемою, спробуйте додати параметри до командлета додавання-переміщення. Наприклад, вказівка ​​проекту запуску, а також назви рядка підключення може допомогти EF знайти цільову базу даних.

add-migration Delta_Defect_0973 -ConfigurationTypeName your.namespace.ContextClassName -StartUpProject DeltaProject -ConnectionStringName DeltaSQL

Де:

Delta_Defect_0973 - це ім’я вашої міграції

your.namespace.ContextClassName - це ім’я вашого класу Configuration у вашій папці міграції з префіксом повного простору імен.

DeltaProject - це назва вашого основного проекту з вашим файлом web.config або app.config.

DeltaSQL - це ім’я вашого рядка підключення, визначеного у вашому файлі web.config або app.config.


Дякую. Це мені справді допомогло.
Джесс

Крім того, якщо ви використовуєте ін'єкцію залежності у своєму рішенні, можливо, вам доведеться вибрати інший проект за замовчуванням на консолі менеджера пакунків. Якщо EF не в змозі знайти ваші міграції, спробуйте вибрати проект, який фактично містить міграції, як проект за замовчуванням.
Ів Рошон,

5

Ця помилка означає, що перед тим, як здійснити іншу явну міграцію, потрібно здійснити міграцію, що очікує. Ви можете вибрати

  1. Виконайте очікувані міграції за допомогою команди Update-Database
  2. Видаліть очікувані міграції. Найбезпечнішим способом є відкриття папки "Міграція", клацніть правою кнопкою миші на [201203170856167_left]> Виключити з проекту

Після цього ви можете знову запустити "Add-Migration ..."

Сподіваюся, це допомагає


4

Тільки мої два центи:

Мій сценарій:

  1. Я відновив свою локальну базу даних до робочого стану.
  2. До цього вже застосовувались міграції.
  3. Кожного разу, коли я намагався додати нову міграцію, я отримував помилку щодо очікуваних міграцій, як згадував мій ОП.

Рішення:

Щоб обійти це, я просто надав більш чіткі параметри:

Add-Migration -ConnectionString "Server=localhost\SQLEXPRESS;Database=YourDataBase;Trusted_Connection=True;" -ConnectionProviderName "System.Data.SqlClient" -verbose

Я вважаю, що ви можете встановити параметр у своїй папці app.config, щоб дозволити вам встановити цю поведінку за замовчуванням, тому вам не доведеться вказувати явні параметри щоразу. Однак я не впевнений, як це зробити.


1
Це працювало для мене, я просто додав ім’я міграції до кінця команди, показаної вище.
sfors повідомляє відновити Моніку

1
=) - рада, що можу допомогти.
IbrarMumtaz

1
-ConnectionStringNameє альтернативою цьому, і витягне рядок з'єднання з вашого конфігураційного імені
Simon_Weaver

1
Це допомогло мені, оскільки я не зберігаю рядок з'єднання у конфігураційному файлі
Sasinosoft

3

Існує двозначність і тому помилка. Найкращий спосіб - виключити поточний файл міграції та створити новий файл міграції ( add-migration ), а потім скопіювати вміст нової міграції у виключений файл і включити його знову та запустити команду update-database .


Я щойно запустив update-databaseкоманду, потім спробував свою add-migrationкоманду, і вона спрацювала
Smitty-Werben-Jager-Manjenson

3

Я вирішив таку ж проблему, як ця:

  • видалити старий файл міграції
  • update-database -force
  • Add-Migration AddedEntity
  • update-база даних

1

У мене були ті самі проблеми, і я зміг її вирішити лише під керуванням Add-Migration 'MigrationName' -Force

З -силя є важливою частиною.


1

У моїй локальній базі даних немає __MigrationHistoryзаповненої або існуючої. Я вручну створив таблицю, а потім перемістив дані в цій таблиці з PROD до моєї локальної бази даних. Це змусило В. С. думати, що міграції застосовані (якими вони були).


У мене була така ж проблема, я об'єднав свою живу БД у виробництво, але тому історія міграції була втрачена.
Метті

1

Порада.-Script Якщо ви не впевнені , завжди добре використовувати перемикач для команд міграції. Це також дійсно допомагає зрозуміти, щоUpdate-Database насправді робить.

Я запускаю наступне для оновлення бази даних, потім отримую сценарій, який можна застосувати вручну (або просто запустити його знову без тегу -Script).

Для Update-Databaseмене було б запустити наступне:

Update-Database -Script -ConfigurationTypeName Configuration_ASPNETIdentity -ConnectionStringName SQL_AzureLive

Де SQL_AzureLiveвказаний рядок підключення в моєму конфігурації.

Тоді я можу перевірити, чи правильно виглядає SQL, застосувати його і закінчити. Як сказали багато інших, якщо рядок з'єднання неправильний або невірний, ви отримаєте цю помилку.


1

Для мене я видалив файл міграції (у вашому випадку "201203170856167_left") з Migrationsпапки, а потім запустив команду нижче в консолі менеджера пакунків

Add-Migration <Parameter>
Update-Database

0

Сценарій

  • Я працюю у філії, в якій я створив нову міграцію БД.
  • Я готовий до оновлення від master, але master також нещодавно переніс БД.
  • Я видаляю db-міграцію моєї гілки, щоб запобігти конфліктам.
  • Я "оновлюю від майстра".

Проблема

Після оновлення від майстра запускаю "Add-Migration my_migration_name", але отримую таку помилку:

Неможливо створити явну міграцію, оскільки очікуються такі явні міграції: [201607181944091_AddExternalEmailActivity]. Застосуйте очікувані явні міграції, перш ніж намагатися створити нову явну міграцію.

Отже, я запускаю "Update-Database" і отримую таку помилку:

Неможливо оновити базу даних, щоб відповідати поточній моделі, оскільки там очікуються зміни, і автоматична міграція вимкнена

Рішення

У цей момент повторний запуск "Додавання міграції my_migration_name" вирішив мою проблему. Моя теорія полягає в тому, що запуск "Update-Database" отримав все в тому стані, який це було потрібно для того, щоб "Додавання-міграція" працювала.


0

Я теж натрапив на це питання. Це сталося, коли я створив нову БД, і у мене були очікувані зміни для міграції моєї першої кодової БД, потім я спробував запустити команду "Оновити-Базу даних". Рішення: Запустіть команду "Add-Migration -MigrationName", щоб створити нову міграцію для нової БД. Потім запустіть команду "Update-Database".


0

У мене ця проблема була і для бази даних, про яку я знав, що вона була оновлена ​​під час запуску Add-Migration. Вирішується шляхом простого запуску команди Add-Migration вдруге. Підозрюйте проблеми з підключенням, як це запропонував Робін Дорбел вище.


У моєму сценарії Ім'я бази даних було регістром під час запуску команди. як тільки зробив
рядок

0

Це сталося, коли я раптом перейменував клас старої міграції, який вже існує у db. Я перевірив історію VCS, визначив це та перейменував назад. Всі працювали згодом.


0

Я зробив інший шлях. Я повністю скинув базу даних і знову запустив "update-database" у vs.


Це не забезпечує життєздатність; діюча міграція зберігає існуючу структуру.
Фердіпукс

0

У мене була простіша проблема. VS помилково повідомив про цю помилку, коли у мене було підключення VPN до сайту клієнта, підключеного на моїй робочій станції. Проблема полягала в тому, що безпека СУБД була налаштована приймати запити тільки з мого реального локального IP-адреси. Просто вимкнення VPN вирішило проблему.


0

У моєму випадку я забув додати свою IP-адресу в правилах брандмауера в Azure, в основному, оскільки мені не вдалося підключитися до бази даних, я отримав цю помилку. Тому спеціально для мого випадку я додав свою IP-адресу до правил брандмауера бази даних в Azure, і все це працювало добре. Окрім цього, це може бути проблема проксі / підключення до Інтернету / Пароль імені користувача DB / Рядок підключення до DB тощо. АБО, очевидно, у вас можуть бути очікувані міграції, для яких вам потрібно запустити команду Update-Database.


0

Історично я завжди вирішував це, видаляючи очікувані міграції, або якщо залишився лише 1, і це було переважно бажано, використовуючи -fдля його відтворення.

Нещодавно це перестало працювати для мене.

Коли це сталося вперше, я перезапустив Visual Studio, а потім дозволив продовжити.

Другий раз, це спрацювало лише після того, як я запустив проект «Чистота». Це було майже так, ніби очікувані міграції були збережені, незважаючи на видалення всіх файлів з провідника.


0

Це не буде відповіддю для багатьох людей, але EF зафіксує цю помилку, коли не зможе підключитися до БД. Якщо ви працюєте вдома, як я, переконайтеся, що ви все ще підключені до своєї мережі VPN!


-1

Я зазнав точно тієї ж проблеми відразу після повернення з міграції на іншу.

У моєму випадку я "націлений на міграцію" з "міграція06" на "міграція04".

Мені потрібно було видалити "migration0" 6, а потім я зміг примусово створити "migration05". В основному це означає, що вам потрібно просто зберегти наступну міграцію після цільової.


-1

У моєму випадку (за допомогою MS Visual Studio) це було так само просто, як перезапуск Visual Studio.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.