4

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

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

有什么方法可以做到这一点,而不必在每次我想更新示例数据时删除数据库?也许代码优先迁移(即使我的模型没有改变,只是数据)?

4

1 回答 1

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"
    });
}

在新范例下,您只需转到 Tools->Library Package Manager->Package Manager Console 并运行以下脚本行:

Update-Database -ConnectionStringName "YourConnectionStringNameGoesHere" -Verbose
于 2012-12-18T04:33:05.137 回答