Подтвердить что ты не робот

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

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

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

Edit

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

4b9b3361

Ответ 1

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<NameOfDbContext>(new DropCreateDatabaseIfModelChanges<NameOfDbContext>());

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

Ответ 2

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

Ответ 3

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

Database.SetInitializer<MyDbContext>(null);

Ответ 4

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

Перейдите в DB и удалите все из таблицы "_MigrationHistory"

Ответ 5

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

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

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

Ответ 6

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

Database.SetInitializer<MyDbContext>(new DropCreateDatabaseIfModelChanges<MyDbContext>());

Запустите приложение еще раз.

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

Ответ 7

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

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

Ответ 8

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

Ответ 9

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

Вся конфигурация в моем случае

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="ZzaDbContext" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=ZaaDbInDepth;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

Ответ 10

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

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

б) Обновите базу данных с помощью команды update-database. Это обновит     База данных с последними изменениями в вашей модели.

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

Database.SetInitializer<VidlyDbContext>(new DropCreateDatabaseIfModelChanges<VidlyDbContext>());

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

Ответ 11

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

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

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

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

Ответ 12

Просто зайдите в Консоль управления пакетами, введите следующее:

Enable-Миграции

* Если появляется такая ошибка, как "Невозможно обновить базу данных, чтобы она соответствовала текущей модели, потому что есть ожидающие изменения, и автоматическая миграция отключена. Запишите изменения ожидающей модели в миграцию на основе кода или включите автоматическую миграцию".

Сделайте это >>> Add-Migration

* Visual studio запросит имя, пожалуйста, введите желаемое имя.

Обновление базы данных

Ответ 13

Вы можете решить эту проблему, удалив таблицу __MigrationHistory, которая автоматически создается в базе данных и регистрирует любое обновление в базе данных с использованием миграций с первым кодом. Здесь, в этом случае, вы вручную изменили свою базу данных, в то время как EF предполагал, что вам нужно сделать это с помощью инструмента миграции. Удаление таблицы означает для EF, что обновлений нет, и нет необходимости выполнять миграцию кода, поэтому она отлично работает.