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

Nps*_*Nps 3 entity-framework ef-migrations entity-framework-6.1

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

当我运行这样的命令时:

Update-Database –TargetMigration: ContentAddDownloadPath
Run Code Online (Sandbox Code Playgroud)

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

指定配置路径时:

Update-Database -ConfigurationType DnpMVCSite.Migrations.ContentMigration.Configuration –TargetMigration: ContentAddDownloadPath
Run Code Online (Sandbox Code Playgroud)

它显示"目标数据库已在版本201407140515121_ContentAddDownloadPath"的消息.

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

Yul*_*dra 9

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

Add-Migration Step3
Update-Database
Run Code Online (Sandbox Code Playgroud)

并且您想要回滚它,只需运行以下命令

Update-Database -TargetMigration Step2
Run Code Online (Sandbox Code Playgroud)

Step2是之前迁移的名称Step3.

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

请查看本文作为paragraft 迁移到特定版本(包括降级)的参考.

UPDATE

我认为您要做的是还原特定目标迁移文件夹/目标配置中的所有更改.为此,您可以指定-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; }
}
Run Code Online (Sandbox Code Playgroud)

我的目录看起来像这样

迁移文件夹

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

Update-Database -ConfigurationTypeName PlaygroundTestEF.Migrations2.Configuration -TargetMigration 0
Run Code Online (Sandbox Code Playgroud)

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

最终结果