Le modèle de sauvegarde du contexte ‘ApplicationDbContext’ a changé depuis la création de la firebase database

Tout d’abord, je n’ai pas vu cette erreur ailleurs et je suppose que ce n’est pas une réplique, veuillez donc lire la situation dans son ensemble.

Tout fonctionnait bien alors j’ai essayé de mettre à jour une de mes classes de modèle (la classe App et la mise à jour est maintenant laissée en commentaire) que je vais lister ci-dessous et que j’ai eu cette erreur moche.


Le modèle de sauvegarde du contexte ‘ApplicationDbContext’ a été modifié depuis la création de la firebase database. Envisagez d’utiliser Code First Migrations pour mettre à jour la firebase database ( http://go.microsoft.com/fwlink/?LinkId=238269 ). at System.Data.Entity.CreateDatabaseIfNotExists 1.InitializeDatabase(TContext context) at System.Data.Entity.Internal.InternalContext.c__DisplayClassf 1.b__e () at System.Data.Entity.Internal.InternalContext.PerformInitializationAction (action Action) at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization () sur System.Data.Entity.Internal.LazyInternalContext.b__4 (InternalContext c) sur System.Data.Entity.Internal.RetryAction 1.PerformAction(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action 1) sur System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase () à System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType (Type entityType) à System.Data.Entity .Internal.Linq.InternalSet 1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet 1.Include (chemin de la chaîne) dans System.Data.Entity.Infrastructure.DbQuery 1.Include(Ssortingng path) at System.Data.Entity.QueryableExtensions.Include[T](IQueryable 1.Include(Ssortingng path) at System.Data.Entity.QueryableExtensions.Include[T](IQueryable 1 source, chemin de chaîne) à System.Data.Entity.QueryableExtensions.Include [T, TProperty] ( 1 source, Expression IQueryable 1 source, Expression chemin 1 source, Expression 1) à Microsoft.AspNet.Identity.EntityFramework.UserStore 6.GetUserAggregateAsync(Expression filtre 6.GetUserAggregateAsync(Expression 1) à Microsoft.AspNet.Identity.EntityFramework.UserStore 6.FindByNameAsync(Ssortingng userName) at Microsoft.AspNet.Identity.UserManager 2.FindByNameAsync (Ssortingng userName) sur Microsoft.AspNet.Identity.UserManager`2.d__12.MoveNext () — Fin de la trace de stack à partir de l’emplacement précédent où l’exception a été générée — à System.Runtime.ComstackrServices.TaskAwaiter.ThrowForNonSuccess (tâche de tâche) à System.Runtime.ComstackrServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tâche de tâche) à ControlPanel.Web.Controllers.AccountController .d__2.MoveNext () dans d: \ Projects \ FULL \ Control Panel \ ControlPanel.Web \ Controllers \ AccountController.cs: ligne 56

Au début, je pensais que cela pourrait être un problème de migration, alors j’ai complètement abandonné la firebase database, réactivé les migrations, ajouté une migration d’initialisation et mis à jour la firebase database en utilisant

 update-database -force -verbose 

Tout se passe bien sans se plaindre, mais chaque fois que j’essaie de me connecter à mon site, j’obtiens l’erreur précédente. J’ai fait la migration environ dix fois sans pouvoir résoudre le problème.

Voici mes classes de domaine (modèles):

 public class App { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public virtual int AppId { get; set; } //[Required] public virtual ssortingng FacebookId { get; set; } //[Required] public virtual ssortingng 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 ssortingng Content { get; set; } public virtual ssortingng Link { get; set; } public virtual ssortingng 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 ssortingng FacebookId { get; set; } [MaxLength(500)] public virtual ssortingng Token { get; set; } //[Required] public virtual App App { get; set; } } 

Voici mes modèles d’identité:

 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"); } } 

Juste au cas où quelqu’un d’autre trébucherait là-dessus, cela faisait une première implémentation de la firebase database comme moi.

J’ai apporté une modification en étendant la classe ApplicationUser , en ajoutant un nouveau champ à la table AspNetUsers , puis AspNetUsers rencontré cette erreur au démarrage.

J’ai été en mesure de résoudre ce problème en supprimant l’enregistrement créé dans la table __MigrationHistory (il n’y avait qu’un seul enregistrement). Je suppose qu’EF a décidé de mettre à jour ma firebase database à l’aide de l’outil de migration.

Cela a fonctionné pour moi – aucun autre changement requirejs.

 DELETE FROM [dbo].[__MigrationHistory] 

Cet article a résolu mon problème. Il s’agit d’append la ligne suivante dans Application_Start() dans Global.asax :

Database.SetInitializer(null);

Cependant, cela entraîne une recréation de la firebase database pour chaque modification de votre modèle et vous risquez de perdre vos données.

Tout le monde a mal à la tête à cause de cette erreur: Assurez-vous que tous vos projets ont une référence au même ensemble Entity Framework.

Petite histoire longue:

Mon modèle et ma candidature étaient dans des assemblages différents. Ces assemblys faisaient référence à une version différente du framework Entity. Je suppose que les deux versions ont généré un identifiant différent pour le même modèle. Ainsi, lorsque mon application a été exécutée, l’identifiant du modèle ne correspondait pas à celui de la dernière migration dans __MigrationHistory. Après la mise à jour de toutes les références à la dernière version d’EF, l’erreur ne s’est plus jamais produite.

C’était une erreur tellement étrange, ce n’était pas mon erreur à la fin, c’était Microsoft, j’ai installé le framework Entity avec la version “pre-release” et il était responsable de cette erreur quand j’ai mis à jour vers stable libérez-le disparue ,, merci à tous croyez-moi quand j’ai posé cette question, j’ai cherché comme pour une semaine ou plus pour sa solution alors je suis assez sûr que ce problème n’est nulle part ailleurs: la version d’entité framework.dll qui a causé la le problème était 6.0.2 si cela aide.

Si vous supprimez la table “[__MigrationHistory]” de votre “firebase database> Tables système”, cela fonctionnera.

J’ai passé plusieurs jours à résoudre ce problème, à parsingr de nombreux articles différents et à essayer de nombreuses options, puis à résoudre le problème . Ce 2 projets dans ma solution en utilisant les premières migrations du code EF:

  • Application de console “DataModel” qui utilise principalement comme assembleur qui contient toutes mes premières entités de code, DbContext, Mirgations et le référentiel générique. J’ai inclus dans ce projet un fichier de firebase database local vide distinct (dans le dossier DataModel / App_Data) pour pouvoir générer des migrations à partir de la console Gestionnaire de packages.
  • WebApi, qui fait référence au projet DataModel et utilise un fichier de firebase database local du dossier WebApi / App_Data, non inclus dans le projet

J’ai eu cette erreur quand demandé WebApi …

Mon environnement:

  • Windows 8.1 x64
  • Visual Studio 2015 Professional avec la mise à jour 1
  • tous mes projets ciblés pour .NET Framework 4.6.1
  • EntityFramework 6.1.3 de NuGet

Ici, j’ai recueilli toutes les remarques que vous devez faire attention et toutes les conditions / exigences qui doivent être remplies, pour éviter les exceptions mentionnées:

  1. Vous ne devez utiliser qu’une seule version du package EntityFramework Nuget pour tous les projets de votre solution.
  2. La firebase database, créée en exécutant séquentiellement tous les scripts de migration, doit avoir la même structure / le même schéma que la firebase database cible et correspondre au modèle d’entité. Les 3 choses suivantes doivent correspondre / refléter / correspondre exactement:
    • Votre script de migration jusqu’à la fin
    • État actuel du premier modèle d’entité de code (DbContext, entités)
    • Base de données cible
  3. La firebase database cible (fichier mdf) doit être mise à jour / correspondre au dernier script de migration. Vérifiez que la table “__MigrationHistory” de votre firebase database cible contient des enregistrements pour tous les scripts de migration dont vous disposez, cela signifie que tous les scripts de migration ont été appliqués avec succès à cette firebase database. Je vous recommande d’utiliser Visual Studio pour la génération correcte du code des premières entités et du contexte correspondant à votre firebase database, Projet -> Ajouter un nouvel élément -> ADO.NET Entity Data Model -> Code d’abord de la firebase database: Bien entendu, si vous ne possédez pas de firebase database, vous pouvez écrire manuellement le modèle (premières entités et contexte du code), puis générer la migration et la firebase database initiales.
  4. Nom de la chaîne de connexion, par exemple MyConnectionSsortingng dans le fichier de configuration du projet de démarrage (Web.config / App.config):

          

    devrait être égal au paramètre passé dans le constructeur de votre DbContext:

      public partial class MyDbContext : DbContext { public MyDbContext() : base("name=MyConnectionSsortingng"){} ... 
  5. Avant d’utiliser la console Gestionnaire de packages , assurez-vous que vous utilisez une firebase database correcte pour la mise à jour ou générez la migration et que le projet requirejs est défini comme projet de démarrage de la solution. Pour se connecter à la firebase database, il utilisera la chaîne de connexion de ce fichier .config, qui dans le projet est défini comme projet de démarrage.
  6. Et le principal, qui a corrigé mon problème: Il est étrange, mais dans mon dossier WebApi / bin, DataModel.exe était ancien, pas actualisé depuis la dernière version. Depuis la migration a été incorporé dans mon assembly DataModel.exe puis ma firebase database mise à jour WebApi en utilisant d’anciennes mirgations. Je ne comprenais pas pourquoi, après la mise à jour de la firebase database dans WebApi, cela ne correspond pas au dernier script de migration de DataModel. Le code suivant crée automatiquement (s’il n’existe pas) ou des mises à jour à la dernière firebase database locale de migration dans mon dossier WebApi / App_Data.

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

    J’ai essayé de nettoyer et de reconstruire la solution mais cela ne m’a pas aidé, j’ai complètement supprimé les dossiers bin et obj de WebApi, supprimé les fichiers de firebase database WebApi / App_Data, créé WebApi, demandé, créé une firebase database correcte lignes ci-dessus), qui correspond à la dernière migration et à l’exception ne sont plus apparues. Donc, cela peut résoudre votre problème:

    1. supprimer manuellement les dossiers bin, obj de votre projet de démarrage (qui génère / met à jour votre firebase database)
    2. construire votre projet de démarrage ou mieux nettoyer et reconstruire toute votre solution.
    3. recréez la firebase database en lançant le projet (exécutera les lignes ci-dessus) ou utilisez la commande “update-database” de la console Gestionnaire de packages.
    4. vérifier manuellement si la firebase database générée et __MirgationHistory correspondent au dernier script de migration.

J’avais le même problème que a7madx7, mais avec une version stable de EF (v6.1.1), et j’ai trouvé la résolution dans:

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

avec variation dans: http://pasortingckdesjardins.com/blog/the-model-backing-the-context- a – changed – since- the- database – was – created – ef4-3

2ème lien inclut une mention spécifique pour VB ….. “vous pouvez simplement append tous les contextes de données ayant ce problème sur votre méthode app_start dans le fichier global.asax comme ceci” :

 Database.SetInitializer(Of DatabaseContext)(Nothing) 

NB: j’ai dû remplacer “DatabaseContext” par le nom de ma classe implémentant DbContext

Mise à jour: En outre, lors de l’utilisation de l’approche codefirst pour vous connecter aux tables existantes, vérifiez la firebase database pour voir si EF a créé une table “_migrationhistory” pour stocker les mappages. J’ai renommé cette table, puis j’ai pu supprimer SetInitializer de global.asax.

Je viens de résoudre un problème similaire en supprimant tous les fichiers du dossier du site Web, puis en le republiant.

supprimer toutes les identités de tables

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

Dans le menu Outils, cliquez sur Gestionnaire de packages NuGet, puis cliquez sur Console du gestionnaire de packages (PMC). Entrez les commandes suivantes dans le PMC.

Enable-Migrations Add-Migration Init Update-Base de données Exécutez l’application. La solution au problème vient d’ici

La suppression de lignes dans la table [__MigrationHistory] avec Older productVersion a fonctionné pour moi. Cette réponse est pour ceux qui ne veulent pas supprimer la totalité de la table [__MigrationHistory]. Supprimez simplement les lignes avec l’ancienne version dans la colonne ProductVersion. J’espère que ça aide quelqu’un!

Cela peut se produire lorsque vous modifiez l’annotation de données d’une propriété de modèle. Par exemple, l’ajout de [Obligatoire] à une propriété entraînera une modification en attente dans la conception de la firebase database.

La solution la plus sûre consiste à exécuter sur la console du gestionnaire de packages:

 add-migration myMirgrationName 

qui affichera les changements exacts dans la méthode Up (). Par conséquent, vous pouvez décider si vous souhaitez vraiment appliquer ces modifications via:

 update-database 

Sinon, vous pouvez simplement supprimer la dernière migration de la table __MigrationHistory et du dossier Migrations de l’explorateur de solutions.

Lorsque je développe, je préfère utiliser cette classe pratique pour configurer les migrations.

J’espère que cela aide.

 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; } } 

Ajouter la ligne ci-dessous dans “Application_Start” dans “Global.asax.cs”

 Database.SetInitializer(new DropCreateDatabaseIfModelChanges()); 

Voici le type d’erreur similaire que j’ai rencontré

Le modèle supportant le contexte ‘PsnlContext’ a changé depuis la création de la firebase database. Envisagez d’utiliser Code First Migrations pour mettre à jour la firebase database ( http://go.microsoft.com/fwlink/?LinkId=238269 ).

J’ai ajouté la section ci-dessous dans l’événement Application Start du Global.asax pour résoudre l’erreur.

Database.SetInitializer (null);

Cela a résolu le problème

Supprimer la firebase database existante, créer une nouvelle firebase database avec le même nom, copier toutes les données … cela fonctionnera