如何卸载 EF Core 表?或者如何删除所有迁移?或者如何从用户代码调用`dotnet ef database update 0`?

Rom*_*kij 2 c# .net-core entity-framework-core-migrations entity-framework-core-2.1 entity-framework-migrations

我正在开发 Web 应用程序并在它附近安装 ef 核心表在数据库中的小型命令行应用程序。最后可以完成调用dbContext.Database.Migrate();,这有效。

现在我想提供unistall选项(使用此应用程序)。

但是如何删除迁移(意味着dotnet ef database update 0从我的代码中调用功能)?

它可能不是一个命令调用(就像dbContext.Database.Migrate();)。但是片段循环遍历迁移程序集中的所有迁移并调用“Downs”。

Iva*_*oev 5

EF Core 仅公开提供dbContext.Database.Migrate();用于迁移最新版本的扩展方法。它在 EF Core 文档的运行时应用迁移部分中提到,其中还包含以下内容

笔记

此方法建立在IMigrator服务之上,可用于更高级的场景。使用DbContext.GetService<IMigrator>()访问它。

这为您提供了解决方案,因为IMigrator接口提供了Migrate接受targetMigrationdotnet ef database updateUpdate-DatabasePM 命令语义相同的可选参数的方法。传递"0"(这是Migration.InitialDatabase常量的值)将执行有问题的操作。

您将需要以下额外的usings:

using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
Run Code Online (Sandbox Code Playgroud)

和这样的代码:

var migrator = dbContext.GetService<IMigrator>();
migrator.Migrate(Migration.InitialDatabase);
Run Code Online (Sandbox Code Playgroud)