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

Модель, поддерживающая контекст "-Context", изменилась с момента создания базы данных, но db является новой производственной базой данных

У меня есть эта ошибка в 762-й раз, но на этот раз я получаю ее, как только пытаюсь получить доступ к моему сайту Production, сразу после удаления базы данных "production" на Azure и затем публикации моего сайта.

The model backing the 'PropertyContext' context has changed since the database was created. Consider using Code First Migrations to update the database

Я удалил базу данных, потому что я не мог исправить эту проблему каким-либо другим способом, но она все еще не работает.

Некоторые важные моменты:

  • Я использую EF6 и публикацию в Azure.
  • Это 1 из 2 проектов/сайтов, которые используют один и тот же проект репо. У меня нет ни одного проблемы с другим, только этот.
  • Я попытался сначала опубликовать проект проблемы (после удаления db) и второй с тем же результатом.
  • Я попытался удалить как ВЕБ-САЙТЫ, так и БД из Azure и снова начать
  • Я попытался удалить все миграции и начать с новой модели данных
  • Я пробовал следующее в своем Global.asax(в обоих проектах)

    Database.SetInitializer PropertyContext > (null); < - SO не позволит мне помещать первый <

и

Database.SetInitializer(new MigrateDatabaseToLatestVersion<PropertyContext, MyConfiguration>());
new PropertyContext().Database.Initialize(true);

Я использую .net 4.5

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

4b9b3361

Ответ 1

Просто напал на ту же ошибку в приложении ASP.Net. В моем случае я не использовал Code First, но я использовал стандартный поставщик аутентификации ASP.Net, который, по-видимому, использует Code First, и аутентификация была нарушена из-за этой проблемы.

Вот быстрое и грязное решение: вам все равно, о существующих пользовательских записях:

Для меня решение было отказаться от таблицы dbo.__MigrationHistory, после этого аутентификация начала работать нормально. Знайте! Это решение не для всех! Это устранит проблему, но это потенциально опасно.

Если вы не можете потерять данные в таблицах AspNet *:

Поставщик аутентификации ASP.Net автоматически создает таблицы в вашей базе данных:

  • AspNetRoles
  • AspNetUsers
  • AspNetUserRoles
  • AspNetUserClaims
  • AspNetUserLogings

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

  • Откройте файл Web.config и проверьте имя строки подключения для вашей базы данных. Это будет одна из записей в элементе <connectionStrings>.
  • Откройте консоль диспетчера пакетов:

    Инструменты → Диспетчер пакетов библиотек → Консоль диспетчера пакетов

  • В окне консоли диспетчера пакетов используйте раскрывающийся список для установки проекта по умолчанию. Убедитесь, что это проект, содержащий код поставщика проверки подлинности ASP.Net.
  • Выполнить команду:
    Update-Database -ConnectionStringName MyConnectionStringName

Замените имя MyConnectionStringName фактическим именем, которое вы искали в web.config.

В результате этой команды вы увидите новую папку "Миграции" с кучей кода, сгенерированной командой Update-Database. Повторно постройте и повторно разверните приложение, новый код перехода будет выполнен при запуске и приведет к синхронизации схемы базы данных с обновленной версией кода поставщика проверки подлинности ASP.Net.

Ответ 2

При использовании Code First with Migrations ваша база данных создает таблицу с именем __MigrationHistory для отслеживания текущей схемы. Когда вы запустите приложение, Entity Framework проверит эту таблицу, чтобы убедиться, что схема базы данных соответствует вашим объектам базы данных. Если они не совпадают, вы получите эту ошибку.

Чтобы обновить базу данных, выполните следующие действия:

  • Откройте консоль диспетчера пакетов (View → Other Windows → Package Manager Console) в Visual Studio
  • В окне консоли диспетчера пакетов есть выпадающее меню с вашими проектами, убедитесь, что он установлен в проект, содержащий ваш DbContext
  • Убедитесь, что проект, содержащий ваш файл App.Config/Web.Config, - "Установить как проект запуска" (если у вас несколько конфигураций, он должен быть указан с строкой соединения с базой данных.
  • Введите Update-Database -ConnectionStringName MyConnString где MyConnString - это имя (а не фактическая строка подключения) вашей строки подключения в App.Config/Web.Config

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

Вы должны включить автоматическую миграцию и повторите попытку. Чтобы включить автоматическое перемещение

  • В папке Migrations (в проекте с вашим DbContext) откройте Configuration.cs.
  • Убедитесь, что конструктор содержит: AutomaticMigrationsEnabled = true;

Чтобы остановить Entity Framework/DbContext от мониторинга изменений в вашей базе данных, вы можете просто удалить таблицу __MigrationHistory в своей базе данных. Тогда вам нужно убедиться, что база данных обновляется вручную.

Статья MSDN здесь

Ответ 3

Решение этого - использовать статический метод SetInitializer и привязать к контексту значение Null. Если вы работаете над веб-решением, наилучшим положением для написания кода является Application_Start вашего файла Global.asax.cs.

protected void Application_Start() 
{
    AreaRegistration.RegisterAllAreas();
    RegisterRoutes(RouteTable.Routes);
    //...
    Database.SetInitializer<MyContext>(null);
}

Ответ 4

У меня такая же проблема сегодня утром. Внезапно возникла ошибка и ее невозможно было решить:

The model backing the 'ApplicationDbContext' context has changed since 
the database was created. Consider using Code First Migrations to update 
the database

У меня есть один проект для MVC и еще один проект для модели, контекста и репозиториев. Я работаю над этим несколько недель, но сегодня он сказал, что остановился.

Я пытался удалить базу данных, включить-перенаправить, добавить-перенаправить и обновить-базу данных столько раз, сколько потерял счет. Я добавил инициализаторы в MigrateDatabaseToLatestVersion, а также DropCreateDatabaseIfModelChanges. Все напрасно...

Что в конечном итоге заставило его работать. заключалось в том, чтобы перемещать модель, контекст и репозитории в проект MVC (не то, что я увлекался)... тогда он работал прямо из коробки без каких-либо изменений кода (кроме пространства имен)! Очень странно...

Я читал так много сообщений в блоге в течение дня, пытаясь решить эту проблему. Один из них (я не знаю, какой из них) упомянул ошибку в Visual Studio 2013, где ссылка на файлы DLL не всегда обновлялась, как и следовало ожидать, что мой проект MVC пропустил что-то, когда я запускал add-migration и update -база в моем отдельном проекте. Но это просто предположение.

Я использую EF 6.1 и .Net 4.5.1 в своем решении.

Ответ 5

Получена аналогичная проблема! Ответ здесь http://www.asp.net/mvc/overview/older-versions/getting-started-with-aspnet-mvc3/cs/adding-a-new-field

(Рик Андерсон) Существует два подхода к разрешению ошибки:

  • Учтите, чтобы Entity Framework автоматически удаляла и воссоздавала базу данных на основе новой схемы классов модели. Этот подход очень удобен при активной разработке тестовой базы данных, поскольку он позволяет быстро развернуть модель и схему базы данных. Однако недостатком является то, что вы теряете существующие данные в базе данных - поэтому вы не хотите использовать этот подход в производственной базе данных!

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

Ответ 6

Я потратил несколько часов, пытаясь решить эту проблему. Один проект работал, другой - нет.

У меня были разные проекты, ссылающиеся на разные версии Entity Framework. В моем случае у меня было приложение Консоль и приложение Windows Service, ссылающееся на третий проект, содержащий первые классы кода и DbContext.

После запуска Update-Package EntityFramework в обоих проектах все отлично работало.