如何在不删除数据库的情况下更新在C#中对SampleData Seed所做的更改?

swi*_*ode 4 c# asp.net-mvc entity-framework dbcontext

我是Entity Framework和MVC 4的新手,我一直在关注微软网站上的音乐商店应用教程(对我的需求进行了一些调整).我有一个使用Code First创建的远程数据库.这包括一个SampleData包含有关歌曲,艺术家,流派等信息的类......并且在创建所有表格后,它将使用此填充数据库.这工作正常.

但是,现在我已经对我的SampleData类进行了一些更改,并且我希望它使用该数据更新数据库(删除已删除的行,插入已添加的新行等等)而不删除数据库.我的数据库管理员不允许我运行DROP命令,因此使用DropCreateDatabaseAlways我的Seed不会起作用.我已在本地完成此操作,它可以正常工作,删除数据库,再次使用表(模型相同)和新的示例数据创建它.

有没有办法这样做,而不必每次我想更新样本数据时删除数据库?也许代码优先迁移(即使我的模型没有改变,只是数据)?

spa*_*ves 6

这种方法是折旧的,只是跳到底部.

您可以使用代码优先迁移数据.

为了更新样本数据(在EF中称为种子数据),您可以在Migrations文件夹中编辑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"
    });
}
Run Code Online (Sandbox Code Playgroud)

在新范例下,您只需转到工具 - >库包管理器 - >包管理器控制台并运行以下脚本行:

Update-Database -ConnectionStringName "YourConnectionStringNameGoesHere" -Verbose
Run Code Online (Sandbox Code Playgroud)