Ho fatto questo tipo di procedura più volte con successo, ma per la prima volta sembra non funzionare. Voglio unire due rami della mia applicazione, hanno diversi stati Code First Migration. Sono consapevole del fatto che durante lo sviluppo di due versioni, lo schema è cambiato in entrambi, risultando in diverse istantanee, quindi ho bisogno di reimpilare le mie migrazioni unite per abbinare le istantanee del database, fondamentalmente seguendo questa guida, Opzione 2 . Nel progetto dato ho dozzine di migrazioni e più di esse sono state unite e re-impalcate con successo come descritto.
Quindi, quello che sto facendo è portare lo stato del database nella versione del database prima della migrazione (ad es. Update-Database -targetMigration 201511261243087_BeforeMigration
, Passaggio 4 della Guida) e Update-Database -targetMigration 201511261243087_BeforeMigration
le Migrazioni unite nell'ordine corretto, in modo che possano re-impalcature i metadati.
Quando utilizzo Command Add-Migration 201512170931290_FirstMergedMigration
, viene visualizzato il seguente messaggio di errore:
Impossibile generare una migrazione esplicita perché sono in corso le seguenti migrazioni esplicite: [201512170931290_FirstMergedMigration, 201512140935307_SecondMergedMigration]. Applicare le migrazioni esplicite in attesa prima di tentare di generare una nuova migrazione esplicita.
Che cosa? Non me lo aspettavo. Mi aspetto che il comando riedifichi i metadati della migrazione esistente e aggiorni lo snapshot dello schema. Ma presumendo che io voglia aggiungere una nuova Migrazione. Il flag -force
non aiuta neanche.
Quando seguo il passaggio consigliato e il Update-Database
, EF creerà una nuova migrazione, denominata: 201512210931290_201512170931290_FirstMergedMigration
. Ora è veramente pazzo.
Vorrei che ci fosse un comando separato per i metadati di Re-Scaffold in modo che potesse mostrare un messaggio di errore più chiaro.
Qualcuno l'ha visto prima?
Vedi la mia risposta .
OK, quindi ho trovato il problema qui ... Sembra che la prima migrazione che ho tentato di re-impilare, non contenesse alcuna modifica dello schema, perché era solo l'aggiunta di indici ecc. Sembra che EF proverà ad aggiungere un nuova migrazione se non rileva la modifica nella Migrazione specificata. Quello che sono stato in grado di fare è stato saltare la migrazione, continuare con la successiva, che ha portato all'atteso:
Solo il codice Designer per la migrazione '201512140935307_SecondMergedMigration' è stato ripiegato. Per re-impilare l'intera migrazione, utilizzare il parametro -Force.
Ho controllato il database e __MigrationHistory
bell'aspetto, quindi faccio le tabelle. Significherebbe meno problemi se EF avesse generato un messaggio di errore migliore invece di provare ad aggiungere una nuova migrazione dove cercavo chiaramente di re-impilare.