Il y a déjà un objet nommé "__MigrationHistory " dans la base de données
Quand j'ai essayé d'exécuter SQLQuery (généré par Update-Database -Verbose -f -Script
localement dans Visual Studio) sur la base de données distante, j'ai vu la suite d'erreur renvoyé par SQL Server Management Studio:
Msg 2714, Niveau 16, État 6, Ligne 1
Il y a déjà un objet nommé "__MigrationHistory " dans la base de données.
Comment résoudre ce problème?
Qu'est-ce que le script que vous essayez d'exécuter?
Cela ne se produit que si le script contient de la création de la table __MigrationHistory' de la commande. N'est ce pas? Si je ne peux pas imaginer pourquoi la mise à jour de la base de données permettrait de le faire.
Avez-vous envie de voir son contenu? Si oui, je vais mettre ça 🙂
J'ai donc besoin de trouver cette commande sur requête? ensuite, retirer? Elle doit être réglée par le présent?
vous pouvez essayer la commande dans nuget PM: ajouter-migration ainsi que mise à jour de la base de données
Cela ne se produit que si le script contient de la création de la table __MigrationHistory' de la commande. N'est ce pas? Si je ne peux pas imaginer pourquoi la mise à jour de la base de données permettrait de le faire.
Avez-vous envie de voir son contenu? Si oui, je vais mettre ça 🙂
J'ai donc besoin de trouver cette commande sur requête? ensuite, retirer? Elle doit être réglée par le présent?
vous pouvez essayer la commande dans nuget PM: ajouter-migration ainsi que mise à jour de la base de données
OriginalL'auteur Amirhossein Mehrvarzi | 2014-09-29
Vous devez vous connecter pour publier un commentaire.
__MigrationHistory
s'agit d'une auto-généré table utilisée par EF pour suivre ce que les mises à niveau et des correctifs qu'il a appliqué à la base de données. EF est complètement conscient de cette table et les poignées sur son propre. Vous devriez ot créer/supprimer/modifier la table. Il semble que votre base de données a déjà cette table. Si EF ou votre mise à niveau-script tente de créer un tel tableau, c'est étrange. Vous avez besoin d'examiner attentivement tout et devinez/en savoir vraiment ce qui s'est passé, soit parce que EF est allé sauvage, ou dans vos scripts sont préparés dans un mauvais sens.Bien que cette réponse est instructif, il n'est pas utile et ne pas permettre à quiconque de la difficulté du problème.
c'est partiellement vrai, mais c'est aussi loin que nous pouvons obtenir, sans plus de renseignements. Mis à part quelques vraiment des choses exotiques comme fortement endommagé serveur de base de données de l'installation, c'est la seule typique de cas possible: "que le script est mal", il a donc le double ou le triple-vérifier le script pour voir pourquoi il a essayé de créer cette table (alors que les scripts de EF habituellement ne serait pas). C'est évident, mais l'OP a ce script, et je n'ai pas dit qu'il essayait de regarder, et ne posez pas de questions sur le pourquoi de certaines pièces de ce script essayé de créer la table, de sorte que.. quoi d'autre pourrais-je/nous conseillons de lui?
OriginalL'auteur quetzalcoatl
Juste une question. Êtes-vous à l'aide d'un schéma différent des autres que dbo?
Je pense que c'est un bug en EF cadre où elle ne vérifie pas le schéma quand il le fait, il vérifie si l' __MigrationHistory table existe.
J'ai été en mesure de résoudre ce problème par la simple création d'un Mannequin __MigrationHistory table avec le schéma dbo, cette trompé les EF6 générateur pour "la création de la table"
CREATE TABLE [dbo].[__MigrationHistory] (
[MigrationId] [nvarchar](150) NOT NULL,
[ContextKey] [nvarchar](300) NOT NULL,
[Model] [varbinary](max) NOT NULL,
[ProductVersion] [nvarchar](32) NOT NULL,
CONSTRAINT [PK_dbo.__MigrationHistory] PRIMARY KEY ([MigrationId], [ContextKey])
)
Si vous souhaitez automatiser l', vous devrez créer un Vide de Migration avec un mannequin de classe qui utilise le schéma dbo et exécuter la migration première pour générer les tables concernées. Ensuite, exécutez les scripts de migration avec le schéma différent et cela devrait fonctionner.
OriginalL'auteur Phillsta
J'ai vu cela se produire lorsque vous faites "le Premier Code à partir d'une Base de données Existante" où la base de données tirée a déjà __MigrationHistory table.
Il finit par l'ajout d'une classe POCO du type. Supprimer la classe, refaire les migrations et l'exécuter à nouveau.
OriginalL'auteur pflous
Vous devez soit modifier votre chaîne de connexion de votre projet de démarrage pour pointer vers la base de données distante, il semblerait qu'il pointe vers une base de données qui a déjà de l' __MigrationHistory table, ou de générer un script à l'aide de
qui va script toutes les migrations dans un seul fichier et vérifier la migration en migration pour voir ceux qui il a besoin pour fonctionner. La première chose que ce script n'est de vérifier l'existence d' __MigrationHistory de la table et de la créer si elle n'existe pas.
OriginalL'auteur Miniver Cheevy
Un programme d'installation pour une migration est peut-être manquant. Tapant la commande
add-migration MigrationName
dans le Gestionnaire de paquets de la Console avant de mettre à jour la base de données a fonctionné pour moi, comme suggéré dans ce tutorielOK. Donc j'espère que ma réponse pourrait être utile à d'autres, que je n'ai pas vu jbutler483 est dans les commentaires à votre question.
OriginalL'auteur Emanuele Bellini
Changement de nom de base de données dans la chaîne de connexion dans le web.config résolu pour moi, après la chute de la base de données. C'est une solution qui aide dans des environnements de dev. La db a été recréé avec les nouvelles entités.
OriginalL'auteur Rafael Souza