2012-09-09 7 views
15

Lavoro su un team di 4 sviluppatori che utilizzano EF5, tutti che lavorano sul proprio database locale. Fino ad ora abbiamo utilizzato le migrazioni automatiche, ma ci stiamo avvicinando al punto in cui dobbiamo rilasciare la produzione, pertanto abbiamo disattivato le migrazioni automatiche e abbiamo iniziato ad aggiungere migrazioni basate su codice esplicite.Update-Database tenta di eseguire una migrazione automatica anche con le migrazioni automatiche disabilitate

qui è il problema: ho eseguito il comando Update-Database dopo uno sviluppatore ha creato una nuova migrazione esplicito e ottengo il seguente errore:

Applying code-based migrations: [201209080142319_CreatedDate.LastModifiedDate.Additions]. 
Applying code-based migration: 201209080142319_CreatedDate.LastModifiedDate.Additions. 
Applying automatic migration: 201209080142319_CreatedDate.LastModifiedDate.Additions_AutomaticMigration. 
Automatic migration was not applied because it would result in data loss. 

Perché ricevo questo errore anche se ho disabili migrazioni automatiche ? Posso correggere questo errore eliminando la migrazione esplicita e quindi re-impalcandolo (eseguendo Add-Migration). Quindi Update-Database funziona correttamente e non menziona nulla su 'Migrazione automatica ...' Inoltre, il codice nella migrazione creata da me quando eseguo Add-Migration è identico a quello creato dal mio compagno di squadra. Non vedo perché proverebbe anche a fare una migrazione automatica dal AutomaticMigrationsEnabled = false;.

Cosa mi manca qui?

risposta

20

Detesto rispondere alla mia domanda, ma ho riscontrato di nuovo questo problema. Uno sviluppatore del mio team ha riattivato le migrazioni automatiche sul proprio computer locale e ha quindi creato una migrazione esplicita, che riproduceva questo comportamento non appena l'ho eseguito.

Entity Framework sarà sempre eseguire una migrazione automatica prima che si esplicita una migrazione che ha la proprietà Source definito nel suo file .resx, anche seAutomaticMigrationsEnabled = false. Una migrazione esplicita avrà solo il set di proprietà Source se viene creato dopo che è stata eseguita una migrazione automatica.

Il risultato è che la disattivazione migrazioni automatiche significa solo che EF non sarà automaticamente aggiornare lo schema quando rileva le modifiche del modello - ma potrebbe ancora fare una migrazione automatica se ha bisogno di colmare un divario tra alcune migrazioni espliciti. Per evitare questo comportamento, non utilizzare una combinazione di migrazioni automatiche e migrazioni esplicite.

1

AutomaticMigrationEnabled = false impedisce all'applicazione di aggiornare il database da solo.

Ma dal momento che si esegue da solo il database di aggiornamento, Update-Database controlla lo stato corrente del database e quindi esegue tutti i passaggi di migrazione non già nel database incluse le modifiche nel modello (dbContext) che non dispongono di un codice migrazione basata su ancora.

La mia ipotesi è che ci sia un cambiamento nel modello che causerebbe la perdita di dati.

È possibile utilizzare il parametro -force per applicare le modifiche ancora in caso di perdita di dati.

0

La mia squadra ha riscontrato qualcosa che potrebbe essere collegato a questo. Se due membri del team aggiungono una migrazione, controllano il loro codice, ottengono l'ultimo e quindi eseguono il database di aggiornamento, il secondo riceve un errore perché c'è una migrazione "ignorata" - il sistema vede che la migrazione del membro del team non è mai stata implementata .

Abbiamo iniziato a controllare tutto e ottenere più tardi, facendo il database di aggiornamento (se un membro del team ha aggiunto una nuova migrazione), quindi facendo add-migration, update-database, check-in.

3
public class Configuration : DbMigrationsConfiguration<bailencasino.com.dal.Context.BlncnoContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 
     AutomaticMigrationDataLossAllowed = true; 
    } 

Aggiungi AutomaticMigrationDataLossAllowed = true; in modo da supporre che si desidera consentire EF di aggiungere oggetti rimuovere SQL che si traducono in una perdita di dati.

+9

Questa domanda riguarda EF che applica una migrazione automatica anche quando sono chiaramente disabilitati. Non voglio mai eseguire migrazioni automatiche e in particolare non voglio che EF perda automaticamente i miei dati. –