Impossible de générer explicite de la migration (EF5) (migrations en cours)
Nous sommes à l'aide de Code-première migrations avec EF5 (localdb)\v11.0 (Vstudio 2012) et tout a fonctionné bien jusqu'à présent.
Cependant aujourd'hui j'avais besoin de créer un couple d'indices sur quelques tables et a couru dans des problèmes.
Premier je l'ai fait en PM:
PM> add-migration AddIdxToOutage
Scaffolding migration 'AddIdxToOutage'.
J'ai modifié le code dans le scaffolding migration:
public override void Up()
{
Sql(@"CREATE NONCLUSTERED INDEX [idx_WtgId_StartDateTime_EndDateTime] ON [dbo].[Outages]
(
[WtgId] ASC,
[StartDateTime] ASC,
[EndDateTime] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]");
}
J'ai mis à jour la base de données et le résultat a été ce:
PM> update-database -startupprojectname D3A.Data -force -verbose
Using StartUp project 'D3A.Data'.
Using NuGet project 'D3A.Data'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Target database is: 'D3A.Data.StorageContext' (DataSource: (localdb)\v11.0, Provider: System.Data.SqlClient, Origin: Convention).
Applying code-based migrations: [201310301258520_AddIdxToOutage].
Applying code-based migration: 201310301258520_AddIdxToOutage.
CREATE NONCLUSTERED INDEX [idx_WtgId_StartDateTime_EndDateTime] ON [dbo].[Outages]
(
[WtgId] ASC,
[StartDateTime] ASC,
[EndDateTime] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
[Inserting migration history record]
Running Seed method.
Idx a été créé sur la table et tout le monde était heureux.
Toutefois - lorsque j'ai créé le prochain indice, j'ai couru dans des problèmes. J'ai créé un vide tâche de migration comme
PM> add-migration AddIdxToState
Unable to generate an explicit migration because the following explicit migrations are pending: [201310301258520_AddIdxToOutage]. Apply the pending explicit migrations before attempting to generate a new explicit migration.
Pardon pour mon français, mais WT*?
Il semble y avoir aucun moyen de contourner cela. Je peux revenir à l'étape de la migration précédente plus de la première idx, ajouter le idx es de nouveau et c'est la même chose.
Pouvez-vous me dire ce que je suis en manque ici? Ce que je fais mal?
Edit:
Je pensais au départ que mon problème était à l'exécution de SQL brut sur la base de données/localdb, mais il semble que tout ce que je fais maintenant, s'arrête après le premier add-migration.
Je viens d'ajouter une nouvelle table de la base de données et c'est le std-résultat de PM Console:
PM> add-migration AddMyLoggerTable
Scaffolding migration 'AddMyLoggerTable'.
The Designer Code for this migration file includes a snapshot of your current Code First model. This snapshot is used to calculate the changes to your model when you scaffold the next migration. If you make additional changes to your model that you want to include in this migration, then you can re-scaffold it by running 'Add-Migration 201310301419063_AddMyLoggerTable' again.
PM> update-database -startupproject DongEnergy.D3A.Data -verbose
Using StartUp project 'D3A.Data'.
Using NuGet project 'D3A.Data'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Target database is: 'D3A.Data.StorageContext' (DataSource: (localdb)\v11.0, Provider: System.Data.SqlClient, Origin: Convention).
Applying code-based migrations: [201310301419063_AddMyLoggerTable].
Applying code-based migration: 201310301419063_AddMyLoggerTable.
CREATE TABLE [dbo].[MyLoggerTable] (
[id] [int] NOT NULL,
[functionId] [int],
[elapsedTime] [bigint],
[noOfRecords] [int],
[dateCreated] [datetime] DEFAULT getDate()
)
[Inserting migration history record]
Running Seed method.
PM> add-migration AddMyLoggerTableFunction
Unable to generate an explicit migration because the following explicit migrations are pending: [201310301419063_AddMyLoggerTable]. Apply the pending explicit migrations before attempting to generate a new explicit migration.
Avis comment je ajouter un nouveau, vide de migration de tâche, utilisez la CreateTable-méthode et qui ont été mis à jour dans la base de données. Mais quand j'ajoute une nouvelle étape de la migration, il se plaint de ce que la tâche était "engagé" à la base de données est toujours "en attente" - même si les deux migrationhistory et les objets de base de données ont été mises à jour.
eh bien, j'ai essayé ce. J'ai repris à l'étape de la migration /avant le/ la création d'index. Qui a bien fonctionné. Ensuite, j'ai ajouté la première étape pour créer un index. Qui a bien fonctionné et la mise à jour de la base de données fonctionne comme prévu. Quand j'ajoute une migration pour créer le deuxième indice, il échoue.
A votre première migration créer son entrée dans l' __MigrationHistory table?
OriginalL'auteur Jesper Lund Stocholm | 2013-10-30
Vous devez vous connecter pour publier un commentaire.
Cela pourrait ne pas résoudre les OP question, mais j'ai eu un problème similaire quand j'ai été l'élaboration d'une nouvelle base de données et essayé d'ajouter deux migrations avant d'effectuer toute mise à jour de la base de données.
Ma solution a été de faire fonctionner mon application, de sorte que l'attente de la migration(s) à mettre à jour la base de données. L'application met à jour automatiquement la base de données à l'aide d'un
MigrateDatabaseToLatestVersion
. Ceci peut être accompli en tapantUpdate-Database
à partir du Gestionnaire de paquets de la Console.Si une migration est ajoutée et de plus des modifications sont apportées qui devraient être ajoutées à la même migration, il ya aussi pas besoin de l'enlever et ajouter de nouveau (j'ai essayé de faire au début). Vous pouvez simplement mettre à jour l'existant en attente de migration, l'aide est affichée lors de l'exécution de l'Add-outil de Migration de l'emballage de la Console du Gestionnaire (accent mis par moi).
En d'autres termes, exécuter le complément de l'outil de Migration avec le même Id que l'opération en cours, et les nouveaux changements seront fusionnés avec l'ancien. Si vous remarquez que les changements ne sont pas fusionnées, vous pouvez utiliser le
-F
drapeau (comme dansAdd-Migration <Name> -Force
) pour forcer la migration, comme anthony-arnold notes dans les commentaires.-Force
, Luke.OriginalL'auteur Patrick
Une autre raison possible est - si vous avez de différents projets dans la solution comme - INTERFACE utilisateur et de la Base (db configuration est ici), puis assurez-vous que lors de l'exécution de la migration de Base de votre projet est de définir comme projet de Démarrage. Il a résolu mon problème. Amusez-vous bien 🙂
OriginalL'auteur Mayeed
Juste est le cas quelqu'un est intéressé, je couru dans la "Impossible de générer un explicite de la migration car celui-ci explicite les migrations sont en cours..." erreur après j'ai changé le ContextKey valeur dans la Configuration.cs fichier. Je l'ai changé en arrière et le problème a disparu.
OriginalL'auteur Matt