首页 > 解决方案 > 如何卸载 EF Core 表?或者如何删除所有迁移?或者如何从用户代码中调用 `dotnet ef database update 0`?

问题描述

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

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

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

它可能不是一个命令调用(就像在 的情况下一样dbContext.Database.Migrate();)。但是通过迁移程序集中的所有迁移和调用“Downs”的代码片段。

标签: c#.net-coreentity-framework-migrationsentity-framework-core-2.1entity-framework-core-migrations

解决方案


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

笔记

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

这为您提供了解决方案,因为IMigrator接口提供了Migrate接受可选targetMigration参数的方法,其语义与dotnet ef database updateor Update-DatabasePM 命令相同。传递"0"(即Migration.InitialDatabase常量的值)将执行相关操作。

您将需要以下附加usings:

using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;

和这样的代码:

var migrator = dbContext.GetService<IMigrator>();
migrator.Migrate(Migration.InitialDatabase);

推荐阅读