Stiamo utilizzando le migrazioni Code-first con EF5 su (localdb) \ v11.0 (Vstudio 2012) e tutto ha funzionato bene finora.Impossibile generare la migrazione esplicita (EF5) (migrazioni in sospeso)
Tuttavia, oggi avevo bisogno di creare un paio di indici su alcuni tavoli e ho incontrato problemi.
Per prima cosa ho fatto questo in PM:
PM> add-migration AddIdxToOutage
Scaffolding migration 'AddIdxToOutage'.
ho modificato il codice di migrazione ponteggi a:
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]");
}
ho aggiornato il database e il risultato è stato questo:
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.
L'idx è stato creato sul tavolo e tutti erano felici.
Tuttavia, quando ho creato l'indice successivo, ho riscontrato dei problemi. Ho creato un compito di migrazione vuota come
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 il mio francese - ma WT *?
Sembra non esserci alcun modo per aggirare questo. Posso ritornare al passaggio di migrazione che precede l'aggiunta del primo idx, aggiungere di nuovo l'idx e la stessa cosa accade di nuovo.
Puoi dirmi cosa mi manca qui? Che cosa sto facendo di sbagliato?
Edit:
Inizialmente ho pensato che il mio problema era in esecuzione SQL prime nel database/LocalDB, ma sembra che tutto quello che faccio ora si ferma dopo il primo add-migrazione.
Ho appena aggiunto una nuova tabella al database e questo è il risultato STD-out da 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.
Si noti come posso aggiungere un nuovo compito di migrazione vuota, utilizzare il CreateTable metodo e hanno aggiornato con successo nel database. Ma quando aggiungo un nuovo passaggio di migrazione, si lamenta che l'attività che è stata appena "impegnata" nel database è ancora "in sospeso", anche se sia la migrazione che gli oggetti del database sono stati aggiornati.
Prova: ripristina, elimina la migrazione e la ricrea. Ho avuto problemi con le migrazioni "vuote" un paio di volte, ma questo semplice trucco lo ha sempre fatto. –
@allo_man, beh, ci ho provato. Sono tornato alla fase di migrazione/prima/alla creazione dell'indice. Questo ha funzionato bene. Poi ho aggiunto il primo passo per creare l'indice. Funzionava bene e il database di aggiornamento funziona come previsto. Quando aggiungo una migrazione per creare un secondo indice, ciò non riesce. –
La prima migrazione ha creato la sua voce nella tabella __MigrationHistory? – Adrian