2012-10-15 13 views
10

Sto usando EF5 con MVC4. Il problema è che ho grandi dati nel mio DB che ho già importato dal DB legacy. Voglio caricare i dati di seed quando il modello cambia. La mia domanda è: come posso seminare grandi quantità di dati che sono già nel mio DB?Semina dati SQL bulk prima migrazione a 5 codici EF

internal sealed class Configuration : MigrationsConfiguration<VoiceLab.Models.EFDataContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
    } 

    protected override void Seed(VoiceLab.Models.EFDataContext context) 
    { 
    //what to do here to seed thousands or records that are already in db 
    } 

} 

grazie,

risposta

17

Ecco come si può seminare i dati bulk fornendo semplicemente i file sql nel metodo di seme.

public class AppContextInitializer : CreateDatabaseIfNotExists<AppContext> 
{ 
    protected override void Seed(AppContext context) 
    { 
     var sqlFiles = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "*.sql").OrderBy(x => x); 
     foreach (string file in sqlFiles) 
     { 
      context.Database.ExecuteSqlCommand(File.ReadAllText(file)); 
     } 

     base.Seed(context); 
    } 
} 
+0

penso che questo sia il modo in cui Bilal stava parlando: http://edspencer.me.uk/2012/10/30/seed-data-from-sql -scripts-con-entità-quadro-migrations-ef-4-3 / – Rahatur

0

La migrazione basata su codice è l'approccio consigliato per i database esistenti (aggiornamento manuale del database) dopo le modifiche del modello. Puoi farlo da PowerShell in finestre Comand Line del pacchetto. In questo modo i dati esistenti saranno preservati.

Se si fa parte di un gruppo di sviluppatori che utilizzano il controllo del codice sorgente, è necessario utilizzare migrazioni puramente automatiche o migrazioni basate esclusivamente su codice. Considerati i limiti delle migrazioni automatiche che utilizzano migrazioni basate su codice negli ambienti di team, è consigliabile.

http://msdn.microsoft.com/en-us/data/jj591621

http://elegantcode.com/2012/04/12/entity-framework-migrations-tips/

internal sealed class Configuration : MigrationsConfiguration<DataContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 

     // if model changes involve data lose 
     AutomaticMigrationDataLossAllowed = true; 

    } 

    protected override void Seed(DataContext context) 
    { 
    //seed only when creating or new database 
    } 

} 
Problemi correlati