340

我已经搞砸了我的迁移,我IgnoreChanges在初始迁移中使用过,但是现在我想删除我的所有迁移并从具有所有逻辑的初始迁移开始。

当我删除文件夹中的迁移并尝试Add-Migration它并没有生成完整文件时(它是空的 - 因为自上次迁移以来我没有进行任何更改,但现在已删除)。

是否有任何禁用迁移命令,所以我可以重新运行Enable-Migrations

4

15 回答 15

487

你需要 :

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

    Enable-Migrations -EnableAutomaticMigrations -Force
    

    有或没有使用-EnableAutomaticMigrations

  4. 最后,您可以运行:

    Add-Migration Initial
    
于 2012-07-26T23:15:46.583 回答
173

问题:你搞砸了你的迁移,你想在不删除现有表的情况下重置它。

问题:您无法使用数据库中的现有表重置迁移,因为 EF 想要从头开始创建表。

该怎么办:

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

  2. 从迁移文件夹中删除现有迁移。

  3. 运行添加迁移重置。这将在您的 Migration 文件夹中创建一个迁移,其中包括创建表(但它不会运行它,因此不会出错。)

  4. 您现在需要在 MigrationHistory 表中创建初始行,以便 EF 拥有当前状态的快照。如果您应用迁移,EF 将执行此操作。但是,您不能应用刚刚进行的迁移,因为数据库中已经存在表。所以进入迁移并注释掉“Up”方法中的所有代码。

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

您现在已重置迁移,可以继续进行正常迁移。

于 2014-03-17T10:26:38.443 回答
30

怎么样

Update-Database –TargetMigration: $InitialDatabase

在包管理器控制台中?它应该将所有更新重置为其早期状态。

参考链接:Code First Migrations - 迁移到特定版本(包括降级)

于 2014-04-03T16:39:17.770 回答
19

要解决此问题,您需要:

  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

如果您正确地完成了上述操作,这应该是成功的,现在您可以正常进行了。

于 2017-03-14T09:12:41.870 回答
18

在实体框架核心中。

  1. 从迁移文件夹中删除所有文件。

  2. 输入控制台

    dotnet ef database drop -f -v
    dotnet ef migrations add Initial
    dotnet ef database update
    
  3. (或用于包管理器控制台)

    Drop-Database -Force -Verbose
    Add-Migration Initial
    Update-Database
    

UPD:仅当您不关心当前的持久数据时才这样做。如果你这样做,请使用 Greg Gum 的答案

于 2018-08-05T08:29:45.580 回答
10

考虑到当我们在 .NET Core 中搜索 EF 时仍然会出现这种情况,我将在此处发布我的答案(因为它一直困扰着我)。请注意,EF 6 .NET 版本有一些细微之处(没有初始命令,您需要删除“快照”文件)

(在 .NET Core 2.1 中测试)

以下是步骤:

  1. 删除 _efmigrationhistory表。
  2. 在整个解决方案中搜索名称中包含Snapshot的文件,例如ApplicationDbContextSnapshot.cs,然后将其删除
  3. 重建您的解决方案
  4. Add-Migration InitialMigration

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

此外,在 #3 中,您可以随意命名您的迁移。

这里有一些额外的资源: asp.net CORE Migrations generated empty

重置 Entity Framework 7 迁移

于 2018-09-25T22:52:11.377 回答
4

删除Migrations文件夹,然后Clean删除Rebuild项目。这对我有用。在清理和重建之前,它说迁移已经存在,因为在它的缓存内存中,它还没有被删除。

于 2020-01-27T04:55:18.920 回答
3

在 EntityFramework 6 请尝试:

Add-Migration Initial

为了更新初始迁移文件。

于 2015-10-21T11:17:55.893 回答
2

我的问题原来是我手动删除了 Migrations 文件夹。我这样做是因为我想备份内容,所以我只是将文件夹拖出项目。我后来通过将其放回(在制作备份副本后)解决了这个问题,然后通过在解决方案资源管理器中右键单击它并从弹出菜单中选择删除来删除迁移文件夹。

于 2013-08-24T13:39:01.383 回答
1

此方法不需要删除__MigrationHistory表,因此您不必在部署时将手放在数据库上。

  1. 从 Migrations 文件夹中删除现有的迁移。
  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()
    {
    }
}
于 2018-11-23T11:51:18.990 回答
1

在 EF6 中

  1. 删除“迁移”文件夹中的所有文件...但不是“初始创建”或“配置”。
  2. 删除数据库。
  3. 现在运行Add-Migration Initial
  4. 现在您可以“更新数据库”,一切都会好起来的。
于 2015-11-12T21:53:53.227 回答
0

2020 年更新 => 重置实体框架迁移

Add-Migration Initial -Context ApplicationDbContext

ApplicationDbContext => 你的上下文。

但是,如果您只需要更新存在的身份模式,请尝试: https ://stackoverflow.com/a/59966100/4654957

于 2020-03-31T02:02:28.330 回答
0

在 Net Core 3.0 中:

我无法找到重置迁移的方法。

我也遇到了迁移失败的问题,这里提供的答案对我不起作用。我有一个 .Net Core 3.0 Web API,在上个月的某个地方,我直接编辑了数据库。是的,我做了一件坏事,坏事。

此处建议的策略导致包管理器控制台中出现许多错误:

  • 该名称的迁移已存在
  • 找不到快照
  • “力”不是公认的参数

诚然,我可能错过了一个步骤或错过了清除正确的文件,但我发现有一些方法可以在没有太多蛮力的情况下清理它:

  • 按名称从 PMC 中删除迁移,以创建相反的顺序,直到并包括损坏的迁移
  • Add-Migration 创建一个新的迁移,这将是最后一次良好迁移到当前架构之间的增量

现在,当 Web API 以空数据库启动时,它会正确创建所有表和属性以匹配实体模型。

于 2019-12-02T15:41:49.800 回答
0

VSC(Visual Studio 代码)——.Net Core

1.删​​除状态:删除你项目中的migrations文件夹;

2.删除数据库中__MigrationHistory的记录;

3.dotnet ef database drop -v那么您确定要删除服务器 '.' 上的数据库 '<your-database' 吗?(y/N) 写“N”

4.dotnet ef migrations add Initial 然后将20211014110429_initial类的代码写入__MigrationHistory的

于 2021-10-14T11:15:33.050 回答
-2
Enable-Migrations -EnableAutomaticMigrations -Force
于 2016-08-13T09:50:28.190 回答