2013-03-01 27 views
35

Sto utilizzando Entity Framework v4. Ho seguito le istruzioni nello Nerd Dinner tutorial. Sono attualmente in modalità di sviluppo (non rilasciata a nessun ambiente superiore) e vorrei che le tabelle venissero ricreate su ogni nuova implementazione, dal momento che i modelli sono ancora altamente volatili e non mi interessa conservare i dati. Tuttavia, ciò non si verifica. Le tabelle non vengono create/modificate o qualsiasi cosa accada al DB. Se passo a un modello di migrazione utilizzando i comandi di Package Manager: enable-migrations, add-migration (initial), funziona e utilizza le mie migrazioni. Tuttavia, poiché non desidero ancora migrazioni granulari e desidero solo il mio script di creazione iniziale, sono costretto a eliminare la cartella delle migrazioni, ripristinare i comandi (enable-migrations, add-migration) ed eliminare il database manualmente, ogni volta Io cambio qualcosa.Come utilizzare Entity Framework in modalità Primo rilascio codice prima?

Come si verifica prima il comportamento di rilascio/creazione del codice?

risposta

50

Utilizzare l'inizializzatore DropCreateDatabaseAlways per il database. Sarà sempre ricreare database durante il primo utilizzo del contesto nel dominio app:

Database.SetInitializer(new DropCreateDatabaseAlways<YourContextName>()); 

In realtà, se si vuole seminare il database, quindi creare il proprio initializer, che verrà ereditato da DropCreateDatabaseAlways:

public class MyInitializer : DropCreateDatabaseAlways<YourContextName> 
{ 
    protected override void Seed(MagnateContext context) 
    { 
     // seed database here 
    } 
} 

e impostarlo prima del primo utilizzo del contesto

Database.SetInitializer(new MyInitializer()); 
+1

Questo funziona solo se il database non esiste. Se il database esiste e apporto modifiche al mio modello, non succede nulla. Anche la sintassi è: Database.SetInitializer (nuovo DropCreateDatabaseAlways ()); –

+1

@RyanLangton no, cadrà e creerà il database –

+2

In realtà, hai ragione. Ma non si è verificato fino a quando non ho eseguito una query all'interno dell'applicazione. Se avvio l'applicazione, non succede nulla. Comportamento interessante –

0

Se il database esiste già e si desidera apportare modifiche al modello, è possibile utilizzare DropCreateDatabaseIfModelChanges<YourContextName>

Problemi correlati