2012-05-09 58 views
3

如何創建(種子)很多實體框架靜態數據的?靜態數據是指位於數據庫中的數據,但只存在一次。如何使用實體框架爲靜態數據創建數據庫?

比如在我的數據庫,我有一個CountrySet,包含所有在地球上的國家。我希望這些國家永遠在那裏,但事實是,每當我清理我的數據庫並重新創建新部署時,所有數據都將丟失。

我的應用程序啓動時(如果它尚未創建)創建這一切似乎是相當敏感的時間。

我能做些什麼嗎?

回答

4

首先,我想問:

你熟悉你獲得,當你設定自己的InitializerSeed功能?

例子:

在你的主函數寫是這樣的:

System.Data.Entity.Database.SetInitializer(new SystemContext.SystemInitializer()); 

哪裏SystemContext是你DbContext類。

在那類,你應該是這樣的:

public class SystemContext : DbContext 
    { 
     public DbSet<Stock> Stocks { get; set; } 
     public DbSet<RawDayValues> StockRawValues { get; set; } 

     public SystemContext() 
      : base("Server=localhost;Database=test;Trusted_Connection=True;") 
     { } 

     public class SystemInitializer : DropCreateDatabaseIfModelChanges<SystemContext> 
     { 
      #region SEED 
      // This is what you're looking for! 
      protected override void Seed(SystemContext context) 
      { 
       try 
       { 
        var stock = new Stock() { Symbol = "TEST" }; 
        context.Stocks.Add(stock); 
        context.SaveChanges(); 
       } 
       catch (Exception ex) { Console.Error.WriteLine(ex.Message); } 
       base.Seed(context); 
      } 

      #endregion 
     } 
    } 

,從一個項目,我已經躺在附近只是一些模板代碼。

如果你確實重新創建數據庫,每次話,我沒有在所有的數據「手動」,並稱知道任何其他方式「種子」的數據庫。

在另一方面,如果你打算做比其他的東西你想改變它的細節每一次下探數據庫,你可能有清除掉根據所有新數據手動寫功能到一些邏輯。

我希望這回答了你的問題:)

ALSO:沒有指定既不是問題,也不使用你在談論哪種技術標籤。我認爲它是。如果不是這樣,請重新標記/指定。

有一個愉快的一天:)

+0

+1很高興看到答案與a-z解釋! –

1

您可以設置一個初始值設定範圍內,e.g:

System.Data.Entity.Database.SetInitializer<MyContext>(new MyInitializer());

其中 'MyInitializer' 是繼承了IDatabaseInitializer<MyContext>接口的類。該接口有一個方法InitializeDatabase(TContext context),並且每當數據庫(重新)創建時調用此方法。

在這個方法中,你可以使用任何手段要填充的分貝。

相關問題