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

当我删除文件夹中的迁移并尝试添加- migration时,它不会生成一个完整的文件(它是空的-因为我没有做任何更改,但现在删除了,迁移)。

是否有禁用-迁移命令,以便我可以重新运行启用-迁移?


当前回答

在实体框架核心。

从migrations文件夹中删除所有文件。 输入控制台 Dotnet ef数据库drop -f -v dotnet ef迁移添加初始化 更新dotnetef数据库 (或用于包管理器控制台) Drop-Database -Force -Verbose Add-Migration初始 - database就

UPD:只有在不关心当前持久化数据时才这样做。如果有,就用Greg Gum的答案

其他回答

你需要:

删除状态:删除项目中的迁移文件夹;和 删除数据库中的__MigrationHistory表(可能在系统表下);然后 在包管理器控制台中执行以下命令: Enable-Migrations -EnableAutomaticMigrations -Force 使用-EnableAutomaticMigrations或不使用-EnableAutomaticMigrations 最后,你可以运行: Add-Migration初始

要解决这个问题,你需要:

删除Migrations文件夹中的所有*.cs文件。 删除数据库中的_MigrationHistory表 执行Enable-Migrations -EnableAutomaticMigrations -Force命令 执行Add-Migration Reset命令

然后,在公共部分类Reset: DbMigration类中,你需要注释所有现有的和当前的table:

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

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

现在运行Update-Database -verbose

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

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

(在。net Core 2.1中测试)

以下是步骤:

删除_efmigrationhistory表。 在整个解决方案中搜索名称中包含Snapshot的文件,例如ApplicationDbContextSnapshot.cs,然后删除它们。 重新构建解决方案 执行Add-Migration InitialMigration命令

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

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

以下是一些额外的资源: asp.net CORE迁移生成空

重置实体框架7迁移

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

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

从migrations文件夹中删除现有的迁移。 在包管理控制台运行Add-Migration ResetMigrations 清理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()
    {
    }
}