J'ai cette erreur pour la 762e fois mais cette fois-ci, je la reçois dès que je tente d'accéder à mon site de production, immédiatement après la suppression de la base de données "de production" sur Azure, puis la publication de mon site.
The model backing the 'PropertyContext' context has changed since the database was created. Consider using Code First Migrations to update the database
J'ai supprimé la base de données parce que je ne pouvais pas résoudre ce problème autrement mais cela ne fonctionne toujours pas.
Quelques points importants:
J'ai essayé ce qui suit dans mon Global.asax (dans les deux projets)
Database.SetInitializer PropertyContext> (null); <- SO ne me laissera pas mettre le premier <
et
Database.SetInitializer(new MigrateDatabaseToLatestVersion<PropertyContext, MyConfiguration>());
new PropertyContext().Database.Initialize(true);
J'utilise .net 4.5
Pourquoi cette erreur apparaît-elle sur une nouvelle base de données et comment puis-je faire fonctionner ce site?
Je viens de rencontrer la même erreur dans l'application ASP.Net. Dans mon cas, je n'ai pas utilisé Code First, mais j'ai utilisé un fournisseur d'authentification ASP.Net standard, qui utilise apparemment Code First, et l'authentification a été rompue à cause de ce problème.
Pour moi, la solution consistait à supprimer la table dbo.__MigrationHistory
, l'authentification a ensuite bien fonctionné. Être conscient! Cette solution n'est pas pour tout le monde! Cela résoudra le problème, mais c'est potentiellement risqué.
Le fournisseur d'authentification ASP.Net crée automatiquement des tables dans votre base de données:
Les tables sont vides par défaut, si vous n'avez pas créé de nouvelles connexions pour votre site Web, vous pouvez utiliser la solution "rapide et sale" ci-dessus. Si vous vous souciez de la préservation des informations utilisateur ou simplement de la curiosité du fonctionnement des migrations Code First, procédez comme suit:
<connectionStrings>
.Ouvrez la console du gestionnaire de packages:
Outils -> Gestionnaire de packages de bibliothèque -> Console du gestionnaire de packages
Update-Database -ConnectionStringName MyConnectionStringName
Remplacez MyConnectionStringName par le nom que vous avez recherché dans web.config.
À la suite de cette commande, vous verrez un nouveau dossier "Migrations" avec un tas de code généré par la commande Update-Database
. Si vous reconstruisez et redéployez votre application, votre nouveau code de migration sera exécuté au démarrage et synchronisera le schéma de base de données avec une version mise à jour du code du fournisseur d'authentification ASP.Net.
Lorsque vous utilisez Code First avec Migrations, votre base de données crée une table appelée __MigrationHistory
pour suivre le schéma actuel. Lorsque vous exécutez votre application, Entity Framework vérifie cette table pour s'assurer que le schéma de base de données correspond à vos entités de base de données. S'ils ne correspondent pas, vous obtiendrez cette erreur.
Pour mettre à jour votre base de données, procédez comme suit:
DbContext
.App.Config
Web.Config
est "Définir comme projet de démarrage" (si vous avez plusieurs configurations, il doit s'agir de celui avec la chaîne de connexion de base de données définie.Update-Database -ConnectionStringName MyConnString
où MyConnString
est le _/nom (pas la chaîne de connexion réelle) de votre chaîne de connexion dans votre App.Config
/Web.Config
Si vous obtenez une erreur comme celle-ci: "Impossible de mettre à jour la base de données pour correspondre au modèle actuel car des modifications sont en attente et que la migration automatique est désactivée."
Vous devez activer les migrations automatiques et réessayer . Pour activer les migrations automatiques
Migrations
(dans le projet avec votre DbContext
), ouvrez Configuration.cs
.AutomaticMigrationsEnabled = true;
Pour empêcher Entity Framework/DbContext de surveiller les modifications de votre base de données, vous pouvez simplement supprimer la table __MigrationHistory
de votre base de données. Il vous appartient ensuite de vous assurer que la base de données reste mise à jour manuellement.
La solution consiste à utiliser la méthode statique SetInitializer et à associer au contexte une valeur Null. Si vous travaillez sur une solution Web, la meilleure position pour écrire le code est dans le champ Application_Start de votre fichier Global.asax.cs.
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
//...
Database.SetInitializer<MyContext>(null);
}
J'ai un problème similaire ce matin. Soudain, l'erreur est apparue et n'a pas pu être résolue:
The model backing the 'ApplicationDbContext' context has changed since
the database was created. Consider using Code First Migrations to update
the database
J'ai un projet pour MVC et un autre projet pour le modèle, le contexte et les référentiels. J'y travaille depuis des semaines mais aujourd'hui, on m'a dit d'arrêter.
J'ai essayé de supprimer la base de données, enable-migration, add-migration et update-database tellement de fois que j'ai perdu le compte. J'ai ajouté des initialiseurs à MigrateDatabaseToLatestVersion et à DropCreateDatabaseIfModelChanges. Tout en vain ...
Ce qui a finalement fait que cela fonctionne était de déplacer le modèle, le contexte et les référentiels dans le projet MVC (pas quelque chose qui me tenait à cœur) ... puis tout fonctionnait immédiatement, sans aucune modification de code (à part les espaces de noms) ! Très étrange...
Au cours de la journée, j'ai lu beaucoup d'articles de blog pour tenter de résoudre ce problème. L'un d'eux (je ne sais pas lequel) a mentionné un bogue dans Visual Studio 2013, dans lequel la référence aux fichiers DLL n'était pas toujours mise à jour correctement, suggérant que mon projet MVC avait oublié quelque chose lorsque j'exécutais add. -migration et update-database dans mon projet séparé. Mais c'est juste une supposition.
J'utilise EF 6.1 et .Net 4.5.1 dans ma solution.
Vous avez un problème similaire! La réponse est ici http://www.asp.net/mvc/overview/older-versions/getting-started-with-aspnet-mvc3/cs/adding-a-new-field
(Rick Anderson) Il existe deux approches pour résoudre l'erreur:
Demandez à Entity Framework de supprimer et de recréer automatiquement la base de données en fonction du nouveau schéma de classe de modèle. Cette approche est très pratique lorsque vous effectuez un développement actif sur une base de données de test, car elle vous permet de faire évoluer rapidement le modèle et le schéma de base de données. L'inconvénient, cependant, est que vous perdez des données existantes dans la base de données - vous ne voulez donc pas utiliser cette approche sur une base de données de production!
Modifiez explicitement le schéma de la base de données existante afin qu'il corresponde aux classes du modèle. L'avantage de cette approche est que vous conservez vos données. Vous pouvez effectuer cette modification manuellement ou en créant un script de modification de base de données.
J'ai passé des heures à essayer de résoudre ce problème. Un projet fonctionnait, l'autre non.
J'ai eu différents projets faisant référence à différentes versions de Entity Framework
. Dans mon cas, j'avais un Console app et un Windows Service app, faisant tous deux référence à un troisième projet contenant le code first classes et DbContext
.
Après avoir exécuté Update-Package EntityFramework
, tout a bien fonctionné dans les deux projets.