Dopo aver cambiato filiali in controllo del codice sorgente, in esecuzione Update-Database per ripristinare una migrazione precedente, EF a volte visualizzerà il testo "Ripristino migrazione automatica", come di seguito:Che cosa significa "Ripristino della migrazione automatica"?
Reverting automatic migration: 201305171619008_DescriptiveNameForMigration.
Reverting code-based migration: 201305162023299_Init.
Come ha fatto Entity Framework determinare che il la migrazione dovrebbe essere automatica e cosa fa in modo diverso?
Ecco come riprodurlo, a patto di avere un progetto con le migrazioni in codice prima già di impostazione:
- passare a una nuova filiale a controllo del codice sorgente
- apporta una modifica al modello mapper, e aggiungi una migrazione
- Update-Database
- Tornate al ramo di default
- -TargetMigration Update-database: 0 -Force
- Vedere "Ripristino della migrazione automatica" nei risultati dal comando Update-Database
Questo è ciò che PENSO sta accadendo, correggimi se ho torto.
- Update-Database enumera le migrazioni in __MigrationHistory
- trova il file di migrazione corrispondenti nel progetto e chiama il metodo di Down()
- Se un file di migrazione corrispondente non esiste, allora esegue un best -guess su come ripristinare la migrazione sulla base della snapshot in __MigrationHistory
Penso che tu abbia descritto bene. –
Il metodo down nel codice è stato ripristinato? Quindi aveva un percorso per recuperare una versione presente nella tabella MigrationHistory. tipo di come previsto non pensi? –
Se il file di codice esiste per la migrazione, verrà utilizzato il metodo Down(). Mi chiedo come funziona il "ripristino della migrazione automatica" quando un file di codice non esiste per il ripristino della migrazione. (Forse è appropriato per una nuova domanda SO.) Anche tu pensi che "ripristinare la migrazione automatica" significa che genera il metodo Down() al volo? –