2014-11-13 15 views
6

Sto cercando di capire come implementare il seguente scenario di distribuzione utilizzando EF code-first e le migrazioni. L'idea è che vorrei aggiornare il DB con modifiche dello schema compatibili con le versioni precedenti (ad es .: aggiungere una colonna) e verificare che tutto funzioni ancora. È ispirato all'implementazione verde/blu, ma non segue completamente quel modello. Il ragionamento dietro questo è nel seguire questo processo:Migrazioni di EF compatibili con le versioni precedenti

  1. database di aggiornamento (migrazione EF)
  2. sito di prova
  3. codice Aggiornamento sito
  4. Se qualcosa va storto, ripristinare il codice del sito web precedente

Il problema che dovrò affrontare è che al passo 2 (e 4) avrò sicuramente un errore da EF sul cambio del modello, sebbene tutte le modifiche del DB siano compatibili con il codice esistente ...

So che una soluzione sarebbe quella di migrare "Giù" il database alla versione precedente (o anche fare un backup del DB), ma può capitare che alcune migrazioni siano davvero complesse e la parte "Giù" possa essere rotta o semplicemente mal codificato.

Quindi la mia domanda è: c'è un modo per evitare che EF verifichi il modello o alla fine si accorga che le modifiche sono compatibili con le versioni precedenti?

risposta

3

L'impostazione del dbinitializer su null interromperà il controllo di compatibilità, ad es.

public class MyDBContext: DbContext 
{ 
    public MyDBContext() : base("myConnString") 
    {    
     //Disable initializer 
     Database.SetInitializer<MyDBContext>(null); 
    } 
    public DbSet<A> As { get; set; } 
    public DbSet<B> Bs { get; set; } 
} 

suggerito anche here

+0

Interessante ... mi è stato sviato dal bit di distribuzione e non sono riuscito a trovare questa domanda. Ad ogni modo, non c'è modo di verificare la compatibilità avanti/indietro giusto? Immagino che tu possa avere il controllo completo o non averlo affatto ... – Tallmaris

+0

Non che io sappia. Non disattiverei il controllo della compatibilita ', dato che questo mezzo causa ancora più mal di testa ... Se possibile, suggerirei di fare test di regressione/integrazione/unità localmente o da un server di build. Se si basa su determinati dati, è possibile utilizzare scritps nei test o creare un db-initializer personalizzato e sovrascrivere il proprio metodo seed. – Indregaard

Problemi correlati