Erreur Entity Framework Code Only: le modèle de sauvegarde du contexte a changé depuis la création de la firebase database

J’ai créé un POCO “Code Only” à utiliser avec une firebase database existante utilisant Entity Framework 4 et le CTP4. Lorsque je lance une requête, j’obtiens l’erreur

Le modèle de sauvegarde du contexte ‘xyzContext’ a été modifié depuis la création de la firebase database. Supprimez / mettez à jour manuellement la firebase database ou appelez Database.SetInitializer avec une instance IDatabaseInitializer. Par exemple, la stratégie RecreateDatabaseIfModelChanges supprime et recrée automatiquement la firebase database et éventuellement la place avec de nouvelles données.

Je ne sais pas pourquoi cela se produit ou ce que je peux changer. J’ai simplement créé le POCO, défini un simple DbContext, apporté quelques modifications, puis essayé d’exécuter une requête simple. Étant donné que j’utilise “Code Only”, je ne connais aucun paramètre de configuration à définir. Et je ne veux certainement pas recréer ou supprimer la firebase database car c’est une firebase database existante.

Merci pour toutes les idées.

    J’ai trouvé la réponse dans les commentaires sur cet article sur le blog de Scott Guthrie.

    http://weblogs.asp.net/scottgu/archive/2010/08/03/using-ef-code-first-with-an-existing-database.aspx

    Pour ceux qui voient cette exception:

    Msgstr “” “Le modèle sauvegardant le contexte” Production “a changé depuis la création de la firebase database. Supprimez / mettez à jour manuellement la firebase database ou appelez Database.SetInitializer avec une instance IDatabaseInitializer.”

    Voici ce qui se passe et que faire à ce sujet:

    Lorsqu’un modèle est créé pour la première fois, nous exécutons un DatabaseInitializer pour créer des éléments tels que la création de la firebase database s’il n’y en a pas ou pour append des données de départ. DatabaseInitializer par défaut tente de comparer le schéma de firebase database nécessaire à l’utilisation du modèle avec un hachage du schéma stocké dans une table EdmMetadata créée avec une firebase database (lorsque Code First est celui qui crée la firebase database). Les bases de données existantes n’auront pas la table EdmMetadata et n’auront donc pas le hachage… et l’implémentation d’aujourd’hui sera lancée si cette table est manquante. Nous allons travailler sur la modification de ce comportement avant que nous livrions la version de fial, car c’est la valeur par défaut. Jusque-là, les bases de données existantes n’ont généralement pas besoin d’initialiseur de firebase database, ce qui permet de les désactiver pour votre type de contexte en appelant:

    Database.SetInitializer(null); 

    Ceci est un bogue dans CTP4 pour utiliser EF avec des bases de données préexistantes.

    Vous pouvez y remédier en appelant:

     Database.SetInitializer(null); 

    dans la méthode Application_Start de Global.asax

    J’ai commenté ci-dessus et cela a fonctionné à l’époque où je jouais juste avec EF5 pour me familiariser avec son fonctionnement. Maintenant, j’écris du code “actuel” et je suis passé de définir un initialisateur de firebase database par contexte dans le code en raison d’une architecture sur laquelle j’ai utilisé MEF pour instancier tout DbContext et injecter toutes les dépendances de configuration en tant que composants composables.

    Donc, encore une fois, j’ai immédiatement rencontré l’erreur décrite ci-dessus, mais cette fois, j’ai choisi de le résoudre en utilisant les entrées du fichier de configuration ci-dessous.

               

    Donc, en définissant disableDatabaseInitialization = “true” dans la section du fichier de configuration pour entityFramework, vous pouvez surmonter l’erreur décrite ci-dessus et ne pas utiliser le code pour créer des contextes.

    Tout ce que j’avais à faire était de déposer la table __MigrationHistory .

    Le contexte:

    J’ai reçu cette erreur lorsque j’ai changé le nom d’une table. Après avoir ajouté l’annotation [Table("NewTableName")] à l’un de mes modèles, Entity Framework a généré une table __MigrationHistory .

    J’avais le même problème: le rajout de la migration et la mise à jour de la firebase database ne fonctionnaient pas et aucune des réponses ci-dessus ne semblait correcte. Puis l’inspiration m’a frappé – j’utilise plusieurs niveaux (un Web, une donnée et une entreprise). La couche Web n’a jamais lancé cette exception – c’était la couche de gestion (que j’ai définie en tant qu’application de console pour les tests et le débogage). Il s’avère que la couche métier n’utilisait pas la bonne chaîne de connexion pour obtenir la firebase database et créer le contexte. J’ai donc ajouté la chaîne de connexion à l’application config et à l’alto qu’elle fonctionne. Mettre ceci ici pour d’autres qui peuvent rencontrer le même problème.