Модель поддержки БД Контекст изменился; Рассмотрим код первой миграции

Модель бэкMyDbContext» контекст изменился с момента создания базы данных. Рассмотрите возможность использования Code First Migrations для обновления базы данных (http://go.microsoft.com/fwlink/?LinkId=238269).

Что является причиной этого? Я'Мы буквально только что создали совершенно новую базу данных и ничего не изменили, но каждый раз, когда я пытаюсь получить доступ к модели с контроллера, она выдает это.

редактировать

Это как-то связано с тем, что я пытался поделиться строкой соединения (т.е. базой данных) с двумя отдельными объектами.

 AaronLS19 февр. 2013 г., 02:39
Пока оба объекта находятся в одном и том же DbContext, то это не должноэто не проблема. Вы настраиваете DbContext для использования строки подключения, и все сущности будут использовать ее.
 droo4611 июн. 2015 г., 17:33
У меня была такая же проблема, но мой обходной путь состоял в том, чтобы включить-миграции в консоли диспетчера пакетов. Я понятия не имею, почему это работает.

Ответы на вопрос(11)

Вы должны верить мне. Я получил эту ошибку по той простой причине, что я забыл добавить строку подключения в App.Config (мой проект wpf) вашего запускаемого проекта.

Весь конфиг в моем случае



  
    
    
  
  
    
  
  
    
  
  
    
      
        
      
    
    
      
    
  

Чтобы устранить эту ошибку, напишите следующий код в методе Application_Start () в файле Global.asax.cs

Database.SetInitializer(null);
 John S26 мар. 2015 г., 21:04
Это решает проблему или просто скрывает симптомы?
 Yawar Murtaza21 мая 2018 г., 15:00
Этот ответ особенно полезен при вызове хранимой процедуры с использованием context.Entities.SqlQuery ("").
 Mahmod Abu Jehad10 нояб. 2018 г., 19:39
почему эта строка ??? @Sid
 Ernesto14 июл. 2017 г., 21:19
Может быть, это мешает ERM касаться базы данных (иногда эточто мы хотим). Не уверен, что именно сделано.
Решение Вопроса

EF codefirst рассмотрит ваш DbContext и обнаружит все объявленные в нем коллекции сущностей (а также рассмотрит сущности, связанные с этими сущностями через свойства навигации). Затем он просмотрит базу данных, которой вы дали строку подключения, и убедится, что все таблицы в ней соответствуют структуре ваших сущностей в модели. Если они не совпадают, то они не могут читать / записывать в эти таблицы. Каждый раз, когда вы создаете новую базу данных или если вы что-то меняете в объявлениях класса сущностей, таких как добавление свойств или изменение типов данных, он обнаружит, что модель и база данных не синхронизированы. По умолчанию это просто выдаст вам вышеуказанную ошибку. Обычно во время разработки вы хотите, чтобы база данных была воссоздана (стерла все данные) и сгенерирована заново из вашей новой структуры модели.

Для этого смотрите "Функция RecreateDatabaseIfModelChanges " в этой статье:http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx

В основном вам нужно предоставить инициализатор базы данных, который наследуется от DropCreateDatabaseIfModelChanges (RecreateDatabaseIfModelChanges теперь не рекомендуется). Для этого просто добавьте эту строку вApplication_Start метод вашегоGlobal.asax файл.

Database.SetInitializer(new DropCreateDatabaseIfModelChanges());

Как только вы отправляетесь в производство и больше не хотите терять данные, выd удалите этот инициализатор и вместо этого используйте перенос баз данных, чтобы можно было вносить изменения без потери данных.

 Axel Andersen04 авг. 2017 г., 19:36
@AaronLS Я фактически ничего не изменил, я пытаюсь вручную создать новый класс, соответствующий таблице БД. Разве это не возможно?
 AaronLS03 авг. 2017 г., 15:47
@AxelAndersen Если у вас есть контроль исходного кода, проверьте изменения для набора изменений и определите, какой объект изменился, затем откатите этот объект. Вы также можете использоватьЭФ Миграция " создать сценарий изменений SQL, чтобы помочь вам понять, что он пытается изменить, чтобы определить, какая сущность EF вышла из синхронизации. Если вы неЕсли вы не хотите изменять DB, то вы не можете изменить классы сущностей EF.
 AaronLS04 авг. 2017 г., 19:42
@AxelAndersen Это возможно, но обратное проектирование сущности из существующей таблицы может быть затруднено, так как мелкие нюансы с определением таблицы могут быть не представлены новой сущностью. Вы должны получить идеальное отображение сущностей, потому что EF применяет различные соглашения, такие как множественное число и именование столбцов FK, которые вы не можете реализовать. Мои предложения помогут понять, что EF думает по-разному между вашей первой моделью кода EF и базой данных. Вы'Вы сможете увидеть таблицу, созданную в сценарии миграции SQL, и сравнить ее с существующим определением таблицы в вашей базе данных.
 adnan15 авг. 2016 г., 05:46
спасибо, это решило мою проблему.
 Axel Andersen07 авг. 2017 г., 09:47
@AaronLS Я сейчас попытался создать новый проект, добавить модель Entity Framework, выбрать только одну таблицу, которая мне нужна, из базы данных, и она отлично работает, и я могу выбрать из этой таблицы. Затем я скопировал этот класс в мой старый проект, но все еще получаю ошибку. Есть ли где-то еще, чем в классе, я должен что-то изменить?
 Antonio Ooi05 мая 2015 г., 21:29
RecreateDatabaseIfModelChanges сейчас :DropCreateDatabaseIfModelChangesСмотрите этот пост.
 Axel Andersen03 авг. 2017 г., 14:01
Я работаю с базой данных, которая существует уже много лет, и многие другие системы зависят от этой базы данных, поэтому нет никаких шансов, что я вообще смогу что-то изменить в этой базе данных. На самом деле, за 13 лет профессионального развития я никогда не работал над проектом, в котором мы могли бы просто изменить базу данных, потому что изменился сом-код. Как я исправлю ту же ошибку?
 AaronLS07 авг. 2017 г., 15:41
@AxelAndersenЯ предложил использовать миграцию EF для генерации сценария изменений, чтобы определить, какие изменения пытается внести EF. Даже несмотря на то, что вы тестировали с одной таблицей, если у вас есть новая таблица в существующем проекте, то есть потенциальные подразумеваемые отношения / FK, которые EF обнаруживает как необходимость развертывания, которых ваша БД не делает.есть Там'Нет смысла пытаться угадать. В вашем распоряжении инструмент для выявления различий. Затем опубликуйте новый вопрос с моделями EF и полученным скриптом изменений, если вам нужна помощь в изменении модели для устранения различий.

что что-то в модели изменилось, вам нужно что-то сделать с базой данных, чтобы получить эту работу. Решение: 1, enable-migrations 2, обновление базы данных

Если вы внесли изменения в свой контекст и хотите вручную внести соответствующие изменения в БД (или оставить все как есть), существует быстрый и грязный способ.

Зайдите в БД и удалите все из "_MigrationHistory» Таблица

Это происходит, когда вашструктура таблицы и класс модели больше не синхронизированы, Вам необходимо обновить структуру таблицы в соответствии с классом модели или наоборот - это когда ваши данные важны и не должны быть удалены. Если ваша структура данных изменилась, и данные не 'Это важно для вас, вы можете использоватьDropCreateDatabaseIfModelChanges функция (ранее известная как ''RecreateDatabaseIfModelChanges особенность), добавив следующий код вGlobal.asax.cs:

Database.SetInitializer(new DropCreateDatabaseIfModelChanges());

Запустите ваше приложение снова.

Как следует из названия, это приведет к удалению вашей базы данных и ее воссозданию в соответствии с вашим последним классом модели (или классами) - при условии, что вы считаете, что определения структуры таблицы в ваших классах модели являются самыми последними и самыми последними; в противном случае измените определения свойств классов вашей модели.

 hakan12 июл. 2015 г., 17:48
после этого база данных упадет, верно?

Добавление этого в качестве другого возможного решения, потому что это то, что исправило это в нашем случае;

Если у вас есть несколько проектов, убедитесь, что они используют одну и ту же версию пакета Entity Framework Nuget !.

В нашем случае у нас был один проект (вызов, если проект A), содержащий первый контекст кода EF со всеми сущностями. Именно этот проект мы использовали для добавления миграции и обновить базу данных. Однако второй проект (B) ссылался на проект A, чтобы использовать контекст. При запуске этого проекта мы получили ту же ошибку;

Модель бэкMyDbContext» контекст изменился с момента создания базы данных. Рассмотрите возможность использования Code First Migrations для обновления базы данных (http://go.microsoft.com/fwlink/?LinkId=238269).

Если вы изменили модель и базу данных с таблицами, которые уже существуют, и вы получаете сообщение об ошибке "Модель поддержки БД Контекст изменился; Считай код первой миграции " вам следует:

Удалить файлы в разделе "Миграция» папка в вашем проектеОткройте консоль диспетчера пакетов и запуститеpm>update-database -Verbose

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

а) Добавить файл миграции, используяадд-миграция <{Имя файла миграции}> через консоль диспетчера пакетов nuget. Этот файл миграции будет иметь скрипт для синхронизации всего, что не синхронизировано между БД и кодом.

б) обновить базу данных, используяобновление базы данныхкоманда. Это обновит базу данных с последними изменениями в вашей модели.

Если это не помогает, попробуйте выполнить следующие действия после добавления строки кода в методе Application_Start файла Global.asax.cs -

Database.SetInitializer(new DropCreateDatabaseIfModelChanges());

Ссылка -http://robertgreiner.com/2012/05/unable-to-update-database-to-match-the-current-model-pending-changes/

Самый простой и безопасный метод Если вы знаете, что вы действительно хотите изменить / обновить структуру данных, чтобы база данных могла синхронизироваться с вашим DBContext, самый безопасный способ:

Откройте консоль диспетчера пакетовТип: update-database -verbose -force

Это говорит EF внести изменения в вашу базу данных, чтобы она соответствовала вашей структуре данных DBContext

В моем случае эта ошибка была вызвана существованием таблицы _MigrationsHistory в базе данных. Удаление этой таблицы решило проблему. Не уверен, как эта таблица попала в нашу базу данных тестовой среды.

 Suman24 июл. 2017 г., 10:48
Решил мою проблему. Спасибо
 batmaci25 дек. 2017 г., 17:27
что это за таблица? зачем нам это нужно?
 AlbatrossCafe15 июн. 2016 г., 21:11
Это было самое быстрое решение для меня. Я добавил 1 новыйbit столбец к таблице и добавил соответствующее свойство в моей модели C #. Я не'Я не хочу отбрасывать все мои данные и сбрасывать все, поэтому я просто удалил эту таблицу истории _Migrations, и она отлично подняла новый столбец в C #.
 Hùng Phạm12 дек. 2018 г., 17:37
Я тоже в вашей ситуации! Дон»не понимаю причину, почему это работает!
 StevieTimes19 окт. 2016 г., 07:09
та же сделка; Я беспокоился обо всех вещах, связанных с миграцией кода, которые мне приходилось делать, когда казалось, что я нет. удаление таблицы _MigrationsHistory прояснило все и для меня!

Ваш ответ на вопрос