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

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

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


当前回答

在Net Core 3.0中:

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

我还遇到了迁移中断的问题,这里提供的答案对我不起作用。我有一个。net Core 3.0 web API,在上个月的某个地方我直接编辑了数据库。是的,我做了一件非常非常糟糕的事。

这里建议的策略导致了包管理器控制台中的一些错误:

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

当然,我可能错过了一个步骤,或者错过了清除正确的文件,但我发现有一些方法可以在不使用暴力的情况下清理这些文件:

从PMC中按名称(按创建的相反顺序)删除-迁移,直至并包括中断的迁移 Add-Migration创建一个新的迁移,它将是最后一次良好迁移到当前模式之间的增量

现在,当web API从一个空数据库启动时,它正确地创建了与实体模型匹配的所有表和属性。

HTH!

其他回答

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

你需要:

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

对于 EFCore 6/7:

为了将所有更改合并到单个文件中,并将其应用到现有数据库中,同时保留所有数据(即在Production和其他开发中),以下步骤对我来说很有效:

Delete existing migrations from the Migrations Folder in your project. Delete the Context Snapshop files. I.e. ApplicationDbContextSnapshot.cs, DatabaseContextModelSnapshot.cs or similar. Rebuild your solution Run Add-Migration Initial. (Can be named how you like instead of Initial). This will create a migration in your Migration folder that includes creating the tables, but won't be applied yet. Open the generated Migration file and comment out all the code inside the "Up" method, so that it doesn't make any changes to all your existing tables. (This allows us to update the database in the correct format, without making any changes in the next step) Before the commented code within the Up function, add migrationBuilder.Sql("DELETE FROM [dbo].[__EFMigrationsHistory]"); to have the delete/truncate applied during migration

public partial class Initial : Migration
{
    public override void Up()
    {
        migrationBuilder.Sql("DELETE FROM [dbo].[__EFMigrationsHistory]");
        /*
          OTHER COMMENTED OUT CODE
        */
    }

    public override void Down()
    {
    }
}

Run Update-Database. It will apply the Migration and remove existing migration tracking entriers (while not actually changing the database schema) and create a snapshot row in __EFMigrationsHistory Submit this code and apply to your dev, staging and production databases as you normally would (Ensure the code is still commented out in the Up function, no changes will be applied, except a new entry created in __EFMigrationsHistory) Remove migrationBuilder.Sql("DELETE FROM [dbo].[__EFMigrationsHistory]"); and uncomment all the code from step 5 and submit back to source control. (This way new devs can create the db from scratch. If someone forgot to update their existing database, it'll error out and complain that the tables already exist, so they can just comment the Initial file out and apply.)

VSC(Visual Studio Code) - .Net核心

1.删除状态:删除项目中的迁移文件夹;

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

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

4.. dotnet ef迁移添加Initial,然后将20211014110429_initial类的代码写入__MigrationHistory的

在EF6

删除“migrations”文件夹中的所有文件…但不是'初始创建'或'配置'。 删除数据库。 现在运行Add-Migration Initial。 现在你可以“update-database”,一切都会好起来。