2012-11-27 35 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 
相关问题