2016-08-31 9 views
1

J'ai fait des modifications manuelles dans la base de données (stupidement) pour essayer de résoudre un problème que j'avais, mais maintenant, mon modèle et mon contexte ne sont plus synchronisés.Impossible de récupérer la table de migration CF

J'ai essayé d'enlever la table d'historique de la migration, la suppression du dossier Mes migrations, puis réexécution

enable-migrations 
add-migration Initial 
Comment out the up() method 
update-database 

Cette reconstitue la table migrationhistory en théorie avec ce que mon modèle actuel est, mais quand je lance le code I toujours obtenir

le modèle soutenant le contexte « EmtDataContext » a changé depuis la base de données a été créée . Envisagez d'utiliser Code First Migrations pour mettre à jour la base de données

Que puis-je essayer d'autre? Je suis effectivement dans la situation où je recommence, je veux créer une référence de migration initiale sur laquelle je peux construire de futurs changements. Je pense que le problème est que le schéma DB n'est plus le même que celui de mon modèle, mais je ne sais pas comment trouver ce qui est différent et je ne peux pas lâcher et recréer le DB car il contient des données critiques.

Comment puis-je restaurer mon schéma de base de données en fonction de mon contexte?

Mise à jour: J'ai parcouru toutes mes classes de modèles et les ai comparées aux tables actuelles dans la base de données. Ils correspondent tous, donc il semble que mon schéma est en ligne. J'ai enlevé tout ce qui concerne les migrations et ça fonctionne bien. Cela implique donc que mon modèle correspond à la base de données. Il semble que lorsque j'essaie de reconfigurer les migrations en activant les migrations et en exécutant la création vide initiale pour configurer l'entrée initiale dans la base de données, elle écrit quelque chose d'invalide dans cette table. Je peux donc l'exécuter sans migrations, mais je n'arrive pas à réinstaller les migrations

Répondre

0

La manière la plus simple est de supprimer la base de données et tous les scripts de migration, puis d'exécuter add-migration et update-database. Cela va créer un tout nouveau schéma.

Si vous avez des données dans la base de données existante dont vous avez besoin, vous avez deux options. L'une consiste à créer une fonction seed. L'autre consiste à sauvegarder la base de données existante, à la restaurer dans une base de données avec un nom différent, puis à écrire des scripts ou similaires pour restaurer les données table par table.

1

Après avoir supprimé l'ancien code de migration et __MigrationHistory:

1) enable-migrations 
2) add-migration Initial -IgnoreChanges --(same as commenting out Up() code 
3) update-database 

effet net devrait être le même que vous avez fait, donc si vous obtenez toujours discordances modèle, essayez d'ajouter une autre migration et d'examiner le code ce que EF essaie de mettre à jour.

Si rien ne s'affiche, cela pourrait être votre initialiseur. En utilisant Database.SetInitializer<MyDbContext>(null); vous obtiendrez l'erreur, mais un peu comme le balayer sous le tapis.

Autres choses à regarder ou essayer:

  • Votre chaîne de connexion va où vous pensez.
  • Plusieurs contextes? Contexte hérité? Afficher le code
  • Vous avez sélectionné le projet avec votre contexte dans la console du gestionnaire de packages