Ho un app MVC4 che ho recentemente aggiornato a Entity Framework 5 e sto cercando di spostare la nostra base di dati oltre a utilizzare le migrazioni dallo stile di sviluppo di cadere e creare ogni corsa.Entity Framework 5 Migrazioni: Impostazione di una migrazione iniziale e seme singolo del database
Ecco quello che ho fatto nella mia funzione di avvio applicazione.
protected void Application_Start()
{
Database.SetInitializer(
new MigrateDatabaseToLatestVersion< MyContext, Configuration >());
...
}
Ho eseguito il comando di Enable-Migrations
sul mio progetto repository e ho pensato che questo sarebbe creare un file di migrazione iniziale però l'unico file che ha creato era Configuration
Quando si elimina il database si crea come previsto tramite codice e semina il database dal file di configurazione. Nel file di configurazione ho cambiato tutte le funzioni per Add()
AddOrUpdate()
Tuttavia esegue la funzione di semi nel mio file Configuration
ogni volta che il sito si avvia e duplicati tutti i dati di sementi ancora e ancora.
immaginavo che avrebbe creato un file initial migration
come il blog ho letto suggerito che sarebbe e ho potuto inserire i dati di semi in là ma non ha
Qualcuno può spiegare come avrei dovuto essere la creazione di DB nel codice in modo che semini solo una volta?
LINK: The migrations blog post I followed
Mentre questo è molto interessante per l'utilizzo del Migrate.exe EF allora ho passato a utilizzare roundhouse per l'esecuzione di migrazioni. Uso ancora EF per impalcare le mie migrazioni in base ai modelli, ma ho scritto una piccola app per console per scrivere le migrazioni in file SQL. Quindi uso roundhouse per eseguire le migrazioni attraverso i miei script di build rake. C'è un po 'più di processo coinvolto, ma è molto più stabile rispetto all'utilizzo di EF per eseguire le migrazioni al volo all'avvio dell'applicazione.
Suppongo che venga eseguito ogni volta perché questo è l'unico modo per farlo senza dover implementare il seeding nella migrazione effettiva. Se il tuo codice seme era all'interno di Up() di una migrazione, verrebbe eseguito una volta sola, e per me è più intuitivo, poiché di solito esegui alcune modifiche db e vuoi seminare alcuni dati in questa nuova parte dello schema – FRoZeN
Se non hai alcuna migrazione, il tuo metodo seme non verrebbe mai eseguito con questo metodo. Anche oggi preferisco fare il seeding in una migrazione - in questo modo so che verrà eseguito solo una volta. – oldwizard
Ciao pcguru. Infatti, si ha sempre una migrazione poiché il database iniziale è considerato come una migrazione, ovvero migra da nessun database a un database. Tuttavia posso vedere il vantaggio di avere il seme nella migrazione. –