從EF和MVC開始,以下不同教程提供了關於將虛擬測試數據放入數據庫的正確位置的不同混淆想法。使用EF5代碼優先遷移將種子數據放在哪裏
所以我做了一些POCO類,我有一個BlahContext
然後在Global.asax.cs中我初始化這樣的數據庫:
protected void Application_Start()
{
Database.SetInitializer(new DropCreateDatabaseAlways<BlahContext>());
}
現在我做了以下在包管理器控制檯中:
PM> enable-migrations -contexttypename Blah.Models.BlahContext
PM> add-migration Initial
PM> update-database
這創建了Configuration.cs,並且在那個類中有一個Seed()me thod - 生成的評論意味着這是放置種子數據的正確位置。所以我填它是這樣的:
internal sealed class Configuration : DbMigrationsConfiguration<Blah.Models.BlahContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
protected override void Seed(Blah.Models.BlahContext context)
{
#if DEBUG
context.Blahs.AddOrUpdate(b => b.ID,
new Blah() { ID = 1, Name = "bum", },
new Blah() { ID = 2, Name = "moo", }
);
#endif
}
}
現在,當我再次運行update-database
,它將填充布拉赫表2個記錄「屁股」和「哞」。都好。
但是當我運行應用程序,它似乎Database.SetInitializer()
呼叫Application_Start
導致數據庫被重建,但這次Configuration.Seed()
方法不調用。所以數據不再存在。
我看到它創建了一個類,如一些其他教程:
class BlahContextInitializer : DropCreateDatabaseAlways<BlahContext>
,然後的Application_Start樣子:
protected void Application_Start()
{
Database.SetInitializer(new BlahContextInitializer());
}
然後在BlahContextInitializer.Seed()
方法是在僞數據包含。這種策略僅適用於EF4.1嗎?
我應該在EF5中放入我的種子數據,以便它在應用程序啓動時不會被擦除?
我沒有意識到如果使用「update-database」,我可以跳過初始化程序。此外,我從來不知道MigrateDatabaseToLatestVersion,它看起來應該工作,我會試試看。 – demoncodemonkey
MigrateDatabaseToLatestVersion取得了訣竅。謝謝! – demoncodemonkey
不客氣的朋友 – NSGaga