2012-10-15 114 views
10

我正在使用EF5與MVC4。問題是我的數據庫中有大量數據,我已經從舊數據庫導入。我想在模型更改時加載種子數據。 我的問題是如何播種已經在我的數據庫中的大量數據?EF 5代碼首先遷移批量SQL數據播種

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 
    } 

} 

感謝,

回答

17

這裏是你如何可以通過只提供種子法的.sql文件種子批量數據。

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

我覺得這是比拉爾在談論的方式:http://edspencer.me.uk/2012/10/30/seed-data-from-sql -scripts-使用實體框架的遷移-EF-4-3 / – Rahatur

0

在模型更改後,基於代碼的遷移是現有數據庫(手動數據庫更新)的推薦方法。您可以在Package Comand Line窗口中執行PowerShell。這樣現有的數據將被保留。

如果您是使用源代碼管理的開發團隊的一員,您應該使用純粹自動遷移或純粹基於代碼的遷移。建議在團隊環境中使用基於代碼的遷移進行自動遷移的限制。

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 
    } 

}