2012-11-27 69 views
4

我是新來的實體框架和MVC 4,我一直在微軟網站上的音樂商店應用程序教程(根據我的需要進行一些適應性調整)。我有一個使用Code First創建的遠程數據庫。其中包括一個SampleData類,其中包含有關歌曲,藝術家,流派等的信息......並且在創建所有表後使用此類填充數據庫。這工作正常。如何在不刪除數據庫的情況下更新對C#中SampleData Seed的更改?

但是,現在我已對SampleData類進行了一些更改,我希望它使用該數據更新數據庫(刪除已刪除的行,插入添加的新行,等等......)沒有刪除數據庫。我的數據庫管理員不允許我運行DROP命令,因此在我的種子中使用DropCreateDatabaseAlways將不起作用。我在本地完成了這個工作,它工作,刪除數據庫,再次使用表(模型是相同的)和新的示例數據創建它。

任何方式來做到這一點,而不必每次我要更新示例數據時刪除數據庫?也許Code First Migrations(即使我的模型沒有改變,只是數據)?

+0

什麼是你的實體框架的版本?我相信這個教程已經過時了。是的,代碼第一次遷移是我認爲的方式http://msdn.microsoft.com/zh-CN/data/jj591621 –

回答

6

此方法折舊,只是跳到底部。

您可以使用代碼優先數據遷移。

爲了更新您的樣本數據(這就是所謂的EF種子數據),您可以在遷移文件夾編輯Configuration.cs並添加或者你想改變有這樣的更新數據:

protected override void Seed(icicle.Models.icicleEntities context) 
{ 
    // This method will be called after migrating to the latest version. 

    // You can use the DbSet<T>.AddOrUpdate() helper extension method 
    // to avoid creating duplicate seed data. E.g. 

    context.Widgets.AddOrUpdate(new Widget() 
    { 
     Id = 1, 
     Name = "My Really Awesome Widget" 
    }); 
} 

在新的範式,你就必須去工具 - >庫包管理器 - >軟件包管理器控制檯,並運行腳本的以下行:

Update-Database -ConnectionStringName "YourConnectionStringNameGoesHere" -Verbose 
相關問題