5

Quindi ho un problema di base cercando di generare una migrazione quando non ho un DB in sincronizzazione (fino alla migrazione più recente, infatti, non ho alcun DB) e ho già apportato modifiche sostanziali al mio modello.Add-Migration mentre ci sono migrazioni esplicite in sospeso

Questo sono i dettagli specifici:

  1. avere una sequenza di migrazioni espliciti.
  2. Nessun database. In breve, hanno molti cambiamenti in sospeso.
  3. Apportate modifiche ai modelli/contesto.
  4. Quando si tenta di aggiungere la migrazione, si lamenterà dicendo esattamente che le migrazioni esplicite sono in sospeso.
  5. Se provo a eseguire la migrazione (e porto il mio DB in sincronizzazione), tramite Update-Database o migrate.exe, fallirà (dopo aver applicato correttamente le migrazioni esplicite), e le migrazioni automatiche non sono abilitate.
  6. Non voglio per consentire migrazioni automatiche sia (per prevenire eventuali modifiche allo schema di essere impegnato e andare dispersi nel codice.)

mi rendo conto che dopo il fallimento a # 5 ora posso eseguire # 4. Quindi riprovare # 5 e voilá.

La mia domanda è se questo è l'approccio previsto per risolvere questa situazione sciocca.

+0

Se non si dispone attualmente DB, si può semplicemente eliminare la cartella migrazioni e chiamare 'dbCtx.Database.Delete()' per avviare il tutto fresco dai vostri modelli. – SimpleVar

+0

Come hai ottenuto più migrazioni senza un database? – Dismissile

+0

@Dismissile: Siamo un team di _N_ sviluppatori e alcuni di noi dispongono di DB locali che si trovano dietro le ultime migrazioni. Come ho descritto sopra, lo sviluppatore riceve l'ultimo codice e inizia a apportare modifiche al modello senza eseguire migrazioni in sospeso; questo è uno scenario tipico. Un altro è se lo sviluppatore non ha mai nemmeno lavorato al progetto e ora riceve tutto il codice per la prima volta. – fernandoespinosa

risposta

10

Vorrei utilizzare il seguente approccio.

Per prima cosa è necessario applicare le migrazioni e specificare l'ultimo.

PM> Update-Database -TargetMigration AnyMigrationName 

# It updates database to a migration named "AnyMigrationName" 
# This will apply migrations if the target hasn't been applied or roll back migrations 
# if it has 

Quando il database locale viene aggiornato è sufficiente aggiungere nuova migrazione.

PM> Add-Migration NewMigrationName 

# it scaffolds a new migration named "NewMigrationName" 

Alla ricerca di un buon riferimento che ho trovato questi post sul EF Migrations che possono aiutare molto. Coprono molte domande e in particolare EF Migrations and a Merge Conflict e EF Migrations Command Reference.

+1

Neat. Ha senso ... Grazie! – fernandoespinosa

+0

questo funziona per me. grazie – CB4

+1

Avuto lo stesso problema, ho scoperto che la mia nuova migrazione non è stata aggiunta al controllo del codice sorgente. Stupido errore – Jeroen

0

questo errore viene visualizzato quando sono presenti numerose migrazioni in sospeso.

Se non sono necessarie migrazioni esistenti, prima eliminare (escludere) tutte le migrazioni nella cartella Migrazione e quindi aggiungere una nuova migrazione.

Add-Migration new

Problemi correlati