复位实体框架迁移(Reset Entity-Framework Migrations)

2019-06-17 13:55发布

我已经打乱了我的迁移,我用IgnoreChanges初始迁移,但现在我想删除我的所有迁移,并与所有的逻辑的初始迁移启动。

当我删除该文件夹中的迁移和尝试,并Add-Migration它不会产生一个完整的文件(它是空的-因为我没有做,因为我上次任何变化,但现在删除,迁移)。

有没有禁用的迁移命令,让我可以重新Enable-Migrations

Answer 1:

你需要 :

  1. 删除状态:删除您项目中的迁移文件夹; 和
  2. 删除__MigrationHistory表在数据库中(可能是在系统表); 然后
  3. 在运行程序包管理器控制台执行以下命令:

     Enable-Migrations -EnableAutomaticMigrations -Force 

    不管有没有用-EnableAutomaticMigrations

  4. 最后,你可以运行:

     Add-Migration Initial 


Answer 2:

问题:您已经打乱了你的迁移和你想不删除现有的表重新设置。

问题:您无法重置与现有表迁移数据库为EF想从头开始创建表。

该怎么办:

  1. 删除从Migrations_History表中的现有迁移。

  2. 删除存储文件夹中的迁移现有的迁移。

  3. 运行Add-迁移复位。 这将创建包含创建表的迁移文件夹迁移(但它不会运行它,所以它不会报错了。)

  4. 现在,您需要在MigrationHistory创建表的初始行,以便EF具有当前状态的快照。 EF会做这个,如果你申请迁移。 然而,你可以不适用,你刚才提出如表中您的数据库已经存在的迁移。 所以进入移民和注释掉“向上”的方法内的所有代码。

  5. 现在运行更新的数据库。 这将应用迁移(而不是实际更改数据库)和创建MigrationHistory快照一行。

现在,您已经重置您的迁移,并可以继续正常迁移。



Answer 3:

怎么样

Update-Database –TargetMigration: $InitialDatabase

在包管理器控制台? 应该所有更新重置很早状态。

参考链接: 代码首先迁移-迁移到一个特定的版本(包括降级)



Answer 4:

为了解决这个问题,您需要:

  1. 删除迁移文件夹中所有*的.cs文件。

  2. 删除_MigrationHistory数据库中的表

  3. 运行Enable-Migrations -EnableAutomaticMigrations -Force

  4. 运行Add-Migration Reset

然后,在public partial class Reset : DbMigration类,你需要注释的所有现有的和当前的表:

public override void Up()
{
// CreateTable(
// "dbo.<EXISTING TABLE NAME IN DATABASE>
// ...
// }
...
}

如果你错过了这一点都将失败,你必须重新开始!

  1. 立即运行Update-Database -verbose

这应该是成功的,如果你已经正确以上,现在可以正常进行。



Answer 5:

我的问题竟然是我手动删除该文件夹的迁移。 我这样做,因为我想备份的内容,所以我干脆拖着夹出该项目的。 我后来把它放回(制作备份后),然后右键单击它在解决方案资源管理器中,然后从弹出菜单中删除的删除文件夹迁移解决了这一问题。



Answer 6:

在6的EntityFramework请尝试:

Add-Migration Initial

为了更新初始迁移文件。



Answer 7:

还在考虑这表明,当我们搜索在.NET核心EF,我会在这里发布我的答案(因为它已困扰了我很多)。 请注意,有一些细微之处与EF 6 .NET版本(无初始命令,你将需要删除的“快照”文件)

(在.NET核心2.1测试)

具体操作步骤如下:

  1. 删除_efmigrationhistory表。
  2. 搜索对于包含快照名称中的文件,比如你的整个解决方案ApplicationDbContextSnapshot.cs ,并将其删除
  3. 运行Add-Migration InitialMigration

请注意: 您必须删除所有快照文件 。 我花了无数的时间只是删除数据库...这将产生一个空的迁移,如果你不这样做。

此外,在#3你可以命名你的迁移,但是你想。

这里有一些额外的资源: asp.net CORE迁移产生的空

复位实体框架7迁移



Answer 8:

在EF6

  1. 删除所有文件在“迁移”文件夹......但不是“初始创建”或“配置”。
  2. 删除数据库。
  3. 现在运行Add-Migration Initial
  4. 现在,您可以“更新数据库”和一切都会好的。


Answer 9:

在实体框架的核心。

  1. 从迁移文件夹中删除所有文件。
  2. 键入控制台

DOTNET EF数据库中删除-f -v

DOTNET EF迁移初始添加

DOTNET EF数据库更新



Answer 10:

这种方法不需要的删除__MigrationHistory表,所以你不必把你的手放在部署数据库上。

  1. 删除存储迁移文件夹中现有的迁移。
  2. 在包管理器控制台运行Add-Migration ResetMigrations
  3. 干净的迁移历史的Up()方法:
/// <summary>
/// Reset existing migrations by cleaning the __MigrationHistory table
/// and creating a new initial migration with the current model snapshot.
/// </summary>
public partial class ResetMigrations : DbMigration
{
    public override void Up()
    {
        Sql("DELETE FROM [dbo].[__MigrationHistory]");
    }

    public override void Down()
    {
    }
}


Answer 11:

Enable-Migrations -EnableAutomaticMigrations -Force


文章来源: Reset Entity-Framework Migrations