如何創建(種子)很多實體框架靜態數據的?靜態數據是指位於數據庫中的數據,但只存在一次。如何使用實體框架爲靜態數據創建數據庫?
比如在我的數據庫,我有一個CountrySet,包含所有在地球上的國家。我希望這些國家永遠在那裏,但事實是,每當我清理我的數據庫並重新創建新部署時,所有數據都將丟失。
我的應用程序啓動時(如果它尚未創建)創建這一切似乎是相當敏感的時間。
我能做些什麼嗎?
如何創建(種子)很多實體框架靜態數據的?靜態數據是指位於數據庫中的數據,但只存在一次。如何使用實體框架爲靜態數據創建數據庫?
比如在我的數據庫,我有一個CountrySet,包含所有在地球上的國家。我希望這些國家永遠在那裏,但事實是,每當我清理我的數據庫並重新創建新部署時,所有數據都將丟失。
我的應用程序啓動時(如果它尚未創建)創建這一切似乎是相當敏感的時間。
我能做些什麼嗎?
首先,我想問:
你熟悉你獲得,當你設定自己的Initializer
到Seed
功能?
例子:
在你的主函數寫是這樣的:
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:沒有指定既不是問題,也不使用你在談論哪種技術標籤。我認爲它是c#,.net和entity-framework-4.3.1。如果不是這樣,請重新標記/指定。
有一個愉快的一天:)
您可以設置一個初始值設定範圍內,e.g:
System.Data.Entity.Database.SetInitializer<MyContext>(new MyInitializer());
其中 'MyInitializer' 是繼承了IDatabaseInitializer<MyContext>
接口的類。該接口有一個方法InitializeDatabase(TContext context)
,並且每當數據庫(重新)創建時調用此方法。
在這個方法中,你可以使用任何手段要填充的分貝。
+1很高興看到答案與a-z解釋! –