删除代码首先迁移并降级到旧状态

时间:2014-07-27 19:39:21

标签: entity-framework ef-migrations entity-framework-6.1

我有多个DBContext,所以我创建了多个Code第一个Migration文件夹。我刚刚在代码中创建了另一个DBContext和相关表。我还添加了迁移文件夹,并在数据库中应用为InitialSetup。现在我意识到我不需要对数据库和代码进行新的更改。我想删除此Migration文件夹并还原在此迁移期间应用的数据库更改。

当我运行这样的命令时:

Update-Database –TargetMigration: ContentAddDownloadPath

得到此错误: 在程序集“DnpMVCSite”中找到了多个迁移配置类型。指定要使用的名称。

指定配置路径时:

Update-Database -ConfigurationType DnpMVCSite.Migrations.ContentMigration.Configuration –TargetMigration: ContentAddDownloadPath

它显示“目标数据库已在版本201407140515121_ContentAddDownloadPath”的消息。

我的问题是我要删除此迁移所完成的新添加的迁移文件夹和数据库修改。

1 个答案:

答案 0 :(得分:9)

如果您只是在程序包管理器控制台上运行以下命令

Add-Migration Step3
Update-Database

你想要回滚它,只需运行以下命令

Update-Database -TargetMigration Step2

Step2Step3之前的迁移名称。

然后,您可以删除Step3文件并还原代码更改。

请检查this article作为paragraft的参考迁移到特定版本(包括降级)

更新

我认为您要做的是还原特定目标迁移文件夹/目标配置中的所有更改。为此,您可以指定-TargetMigration 0

请注意,如果这样做,即使初始状态也会恢复该目录/配置中的所有迁移。例如,我有这些引用相同数据库的类。

public class AppContext : DbContext
{
    public DbSet<Customer> Customers { get; set; }
}
public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Code { get; set; }
    public string Area { get; set; }
}
public class AppContext2 : DbContext
{
    public AppContext2()
        : base("AppContext")
    {
    }
    public DbSet<City> Cities { get; set; }
}
public class City
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Code { get; set; }
    public string Area { get; set; }
    public string Grade { get; set; }
    public string Division { get; set; }
}

我的目录看起来像这样

Migration Folder

如果我想恢复Migrations2文件夹中的所有更改,我需要做的是。

Update-Database -ConfigurationTypeName PlaygroundTestEF.Migrations2.Configuration -TargetMigration 0

结果如下,城市表现已被删除。

End Result