Модель, поддерживающая контекст «ApplicationDbContext», изменилась с момента создания базы данных

Прежде всего, я не видел эту ошибку где-либо еще, и я думаю, что это не репликация, поэтому сначала прочитайте всю ситуацию.

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


Модель, поддерживающая контекст «ApplicationDbContext», изменилась с момента создания базы данных. Рассмотрите возможность использования First First Migrations для обновления базы данных ( http://go.microsoft.com/fwlink/?LinkId=238269 ). в System.Data.Entity.CreateDatabaseIfNotExists 1.InitializeDatabase(TContext context) at System.Data.Entity.Internal.InternalContext.c__DisplayClassf 1.b__e () в System.Data.Entity.Internal.InternalContext.PerformInitializationAction (действие действия) в System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization () в System.Data.Entity.Internal.LazyInternalContext.b__4 (InternalContext c) в System.Data.Entity.Internal.RetryAction 1.PerformAction(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action 1 действие) в System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase () в System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType (тип entityType) в System.Data.Entity 1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet 1.Include (String path) в System.Data.Entity.Infrastructure.DbQuery 1.Include(String path) at System.Data.Entity.QueryableExtensions.Include[T](IQueryable 1.Include(String path) at System.Data.Entity.QueryableExtensions.Include[T](IQueryable 1 источник, путь String) в System.Data.Entity.QueryableExtensions.Include [T, TProperty] ( 1 source, Expression IQueryable 1 source, Expression путь 1 source, Expression 1) в Microsoft.AspNet.Identity.EntityFramework.UserStore 6.GetUserAggregateAsync(Expression фильтр 6.GetUserAggregateAsync(Expression 1) в Microsoft.AspNet.Identity.EntityFramework.UserStore 6.FindByNameAsync(String userName) at Microsoft.AspNet.Identity.UserManager 2.FindByNameAsync (имя_терминала) в Microsoft.AspNet.Identity.UserManager`2.d__12.MoveNext () — Конец трассировки стека из предыдущего места, где было выбрано исключение – в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача задачи) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача задачи) в ControlPanel.Web.Controllers.AccountController .d__2.MoveNext () в d: \ Projects \ FULL \ Панель управления \ ControlPanel.Web \ Controllers \ AccountController.cs: строка 56

Сначала я подумал, что это проблема миграции, поэтому я полностью удалил базу данных, повторно включил миграции и добавил миграцию Init и обновил базу данных, используя

 update-database -force -verbose 

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

Вот мои classы (модели):

 public class App { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public virtual int AppId { get; set; } //[Required] public virtual string FacebookId { get; set; } //[Required] public virtual string Secret { get; set; } public virtual List Users { get; set; } public virtual List Posts { get; set; } //public virtual ApplicationUser Admin { get; set; } } public class Post { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public virtual int PostId { get; set; } public virtual string Content { get; set; } public virtual string Link { get; set; } public virtual string Image { get; set; } public virtual bool IsSpecial { get; set; } //[Required] public virtual App App { get; set; } //[Required] public virtual DateTime? PublishDate { get; set; } } public class User { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public virtual int UserId { get; set; } [MaxLength(500)] public virtual string FacebookId { get; set; } [MaxLength(500)] public virtual string Token { get; set; } //[Required] public virtual App App { get; set; } } 

Вот мои IdentityModels:

 public class ApplicationUser : IdentityUser { public virtual List Apps { get; set; } public bool? IsPremium { get; set; } [DataType(DataType.Date)] public DateTime? LastPublishDateTime { get; set; } } public class ApplicationDbContext : IdentityDbContext { public ApplicationDbContext() : base("dCon") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity().ToTable("Admins"); modelBuilder.Entity().ToTable("Admins"); modelBuilder.Entity().ToTable("AdminRoles"); modelBuilder.Entity().ToTable("Logins"); modelBuilder.Entity().ToTable("Claims"); modelBuilder.Entity().ToTable("Roles"); } } 

На всякий случай, когда кто-то натыкается на это, это делает первую реализацию базы данных, такую ​​как я.

Я внес изменения, расширив class ApplicationUser , добавив новое поле в таблицу AspNetUsers , а затем эту ошибку при запуске.

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

Это сработало для меня – никаких других изменений не требовалось.

 DELETE FROM [dbo].[__MigrationHistory] 

Этот пост исправил мою проблему. Это все о добавлении следующей строки в Application_Start() в Global.asax :

Database.SetInitializer(null);

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

Все получают головную боль от этой ошибки: убедитесь, что все ваши projetcs ссылаются на одну и ту же сборку Entity Framework.

Краткая история:

Моя модель и мое приложение находились в разных assemblyх. Эти сборки ссылались на другую версию инфраструктуры Entity. Я предполагаю, что две версии сгенерировали другой идентификатор для одного и того же модуля. Поэтому, когда мое приложение запускало идентификатор модели, оно не соответствовало одной из последних миграций в __MigrationHistory. После обновления всех ссылок на последнюю версию EF ошибка никогда не появлялась снова.

Это была такая странная ошибка. Это была не моя ошибка в конце, это был Microsoft, я установил фреймворк Entity в версию «до выпуска», и он отвечал за эту ошибку, когда я обновился до стабильной релиз, он исчез, спасибо всем, кто мне верит, когда я задал этот вопрос, который я искал, например, неделю или около того для его решения, поэтому я уверен, что эта проблема не где-то еще: версия entity framework.dll, которая вызвала проблема была 6.0.2, если это помогает.

Если вы удалите таблицу «[__MigrationHistory]» из вашей «базы данных»> «Системные таблицы», она будет работать.

Я провел много дней, чтобы решить эту проблему, проанализировал много разных сообщений и попробовал много вариантов и, наконец, исправил. Это 2 проекта в моем решении с использованием первых миграций EF-кода:

  • Консольное приложение «DataModel», которое в основном используется как assembly, которая содержит все мои первые объекты кода, DbContext, Mirgations и общий repository. Я включил в этот проект отдельный пустой файл локальной базы данных (в папке DataModel / App_Data), чтобы иметь возможность генерировать миграцию из консоли диспетчера пакетов.
  • WebApi, который ссылается на проект DataModel и использует файл локальной базы данных из папки WebApi / App_Data, который не включен в проект

Я получил эту ошибку при запросе WebApi …

Моя среда:

  • Windows 8.1 x64
  • Visual Studio 2015 Professional с обновлением 1
  • все мои проекты, предназначенные для .NET Framework 4.6.1
  • EntityFramework 6.1.3 от NuGet

Здесь я собрал все замечания, на которые вы должны обратить внимание, и все условия / требования, которые должны быть выполнены, чтобы избежать упомянутого исключения:

  1. Вы должны использовать только одну версию пакета EntityFramework Nuget для всех проектов вашего решения.
  2. База данных, созданная путем последовательного запуска всех сценариев миграции, должна иметь ту же структуру / схему, что и целевая firebase database, и соответствовать модели сущности. Следующие 3 вещи должны точно соответствовать / отражать / соответствовать друг другу:
    • Весь ваш сценарий миграции до последнего
    • Текущее состояние первой сущности объекта (DbContext, entity)
    • Целевая firebase database
  3. Целевая firebase database (файл mdf) должна обновляться / соответствовать последнему сценарию миграции. Убедитесь, что таблица «__MigrationHistory» в вашей целевой базе данных содержит записи для всех сценариев миграции, которые вы имеете, это означает, что все сценарии миграции были успешно применены к этой базе данных. Я рекомендую вам использовать Visual Studio для генерации правильных кодов первых сущностей и контекста, соответствующих вашей базе данных, Project -> Добавить новый элемент -> ADO.NET Entity Data Model -> Code First из базы данных: Конечно, в качестве альтернативы, если у вас нет базы данных, вы можете написать модель вручную (код первых сущностей и контекста), а затем создать начальную миграцию и базу данных.
  4. Имя строки подключения, например MyConnectionString, в файле конфигурации проекта запуска (Web.config / App.config):

          

    должен быть равен параметру, переданному в конструкторе вашего DbContext:

      public partial class MyDbContext : DbContext { public MyDbContext() : base("name=MyConnectionString"){} ... 
  5. Прежде чем использовать консоль диспетчера пакетов , убедитесь, что вы используете правильную базу данных для обновления или создания миграции, а необходимый проект задается как проект запуска. Для подключения к базе данных он будет использовать строку подключения из этого файла .config, который в проекте, который задан как проект запуска.
  6. И главное, что исправило мою проблему: это странно, но в моей папке WebApi / bin DataModel.exe был стар, не обновлялся с момента последней сборки. Так как миграции были встроены в мою сборку DataModel.exe, то моя обновленная firebase database WebApi использовала старые зеркала. Я был смущен, почему после обновления базы данных в WebApi он не соответствует последнему сценарию миграции из DataModel. Следующий код автоматически создает (если не существует) или обновляет последнюю локальную локальную миграцию в моей папке WebApi / App_Data.

      public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { Database.SetInitializer(new MigrateDatabaseToLatestVersion()); ... 

    Я попробовал очистить и перестроить решение, но это не помогло, чем я полностью удалил папки bin и obj из WebApi, удалил файлы базы данных из WebApi / App_Data, создал, перезапустил WebApi, сделал запрос к нему, создал правильную базу данных – ленивую инициализацию (используя строки выше), что соответствует последней миграции и исключению, больше не отображается. Таким образом, это может решить вашу проблему:

    1. удалите вручную bin, obj папки из вашего проекта запуска (который генерирует / обновляет вашу базу данных)
    2. создайте свой проект запуска или лучше очистите и перестройте все решение.
    3. воссоздайте базу данных, запустив проект (выполнив строки выше) или воспользуйтесь командой «Обновление-firebase database» диспетчера пакетов.
    4. вручную проверьте, соответствует ли сгенерированный db и __MirgationHistory последнему сценарию миграции.

У меня была такая же проблема, как и у a7madx7, но со стабильным выпуском EF (v6.1.1) и найдено разрешение, опубликованное в:

http://cybarlab.com/context-has-changed-since-the-database-was-created

с изменением: http://patrickdesjardins.com/blog/the-model-backing-the-context-has-changed-since-the-database-was-created-ef4-3

Вторая ссылка включает в себя конкретное упоминание для VB ….. «вы можете просто добавить все databasecontext, которые имеют эту проблему в вашем методе app_start в файле global.asax, как это» :

 Database.SetInitializer(Of DatabaseContext)(Nothing) 

NB: мне пришлось заменить «DatabaseContext» на имя моего classа, реализующего DbContext

Обновление. Кроме того, при использовании подхода codefirst для подключения к существующим таблицам проверьте базу данных, чтобы увидеть, создала ли EF таблицу «_migrationhistory» для хранения сопоставлений. Я переименовал эту таблицу, после чего смог удалить SetInitializer из global.asax.

Я просто решил аналогичную проблему, удалив все файлы в папке веб-сайта, а затем переиздал ее.

удалить все идентификаторы таблиц

 Delete _MigrationHistory Delete AspNetRoles Delete AspNetUserClaims Delete AspNetUserLogins Delete AspNetRoles Delete AspNetUser 

В меню «Сервис» выберите «NuGet Package Manger», затем «Консоль диспетчера пакетов» (PMC). Введите следующие команды в PMC.

Enable-Migrations Add-Migration Init Update-Database Запуск приложения. Решение проблемы отсюда

Удаление строк в таблице [__MigrationHistory] с помощью Older productVersion работало для меня. Этот ответ предназначен для тех, кто не хочет удалять всю таблицу [__MigrationHistory]. Просто удалите строки со старой версией в ProductVersion Column. Надеюсь, это поможет кому-то!

Это может произойти, если вы измените аннотацию данных свойства модели. например: добавление [Требуется] к свойству приведет к ожидающему изменениям в дизайне базы данных.

Самое безопасное решение – запустить в консоли диспетчера пакетов:

 add-migration myMirgrationName 

который будет отображать точные изменения в методе Up (). Поэтому вы можете решить, действительно ли хотите применить такие изменения, используя:

 update-database 

В противном случае вы можете просто удалить последнюю миграцию из таблицы __MigrationHistory и из папки Migrations в обозревателе решений.

Когда я развиваюсь, я предпочитаю использовать этот практический class для настройки Migrations.

Надеюсь, поможет.

 public class ApplicationDbContext : IdentityDbContext { public ApplicationDbContext() : base("DefaultConnection", throwIfV1Schema: false) { this.Configuration.LazyLoadingEnabled = false; } public static ApplicationDbContext Create() { return new ApplicationDbContext(); } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Conventions.Remove(); modelBuilder.Conventions.Remove(); Database.SetInitializer(new StackOverflowInitializer()); } public class StackOverflowInitializer : DropCreateDatabaseIfModelChanges { public StackOverflowInitializer() { // TODO NOTHING, COMMENT ALL // IF CHANGES, RECREATE Database.SetInitializer(new DropCreateDatabaseIfModelChanges()); // CREATE ONLY NOT EXITS //Database.SetInitializer(new CreateDatabaseIfNotExists()); } } public System.Data.Entity.DbSet Companies { get; set; } } 

Добавьте строку ниже «Application_Start» в «Global.asax.cs»

 Database.SetInitializer(new DropCreateDatabaseIfModelChanges()); 

Ниже была аналогичная ошибка, с которой я столкнулся

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

Я добавил раздел ниже в разделе «Запуск приложения» Global.asax для устранения ошибки

Database.SetInitializer (null);

Это фиксировало проблему

Удалите существующий db, создайте новый db с тем же именем, скопируйте все данные … он будет работать

  • Как выбрать только записи с наивысшей датой в LINQ
  • LEFT JOIN в LINQ для объектов?
  • LINQ Distinct () для определенного свойства
  • LINQ: выберите объект и измените некоторые свойства, не создавая новый объект
  • Почему LINQ to Entities не распознает метод «System.String ToString ()?
  • Проверьте, является ли массив подмножеством другого
  • Рекурсивная иерархия - рекурсивный запрос с использованием Linq
  • Разница между Lookup () и словарем (из списка ())
  • Row_number over (Partition by xxx) в Linq?
  • LINQ: динамический выбор
  • Определите, содержит ли последовательность все элементы другой последовательности, используя Linq
  • Давайте будем гением компьютера.