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

时间:2018-08-28 18:34:00

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

我正在开发Web应用程序,并且正在附近开发小型命令行应用程序,该应用程序在数据库中安装ef核心表。最后可以通过调用dbContext.Database.Migrate();来完成此工作。

现在,我想提供unistall选项(与此应用一起提供)。

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

它可能不是一个命令调用(与dbContext.Database.Migrate();一样)。但是,在迁移组装和调用“ Downs”的所有迁移中都有循环代码。

2 个答案:

答案 0 :(得分:4)

EF Core仅公开提供用于迁移最新版本的dbContext.Database.Migrate();扩展方法。 EF Core文档的Applying migrations at runtime部分对此进行了提及,其中还包含以下内容

  

注意

     

此方法建立在IMigrator服务的基础上,该服务可用于更高级的方案。使用DbContext.GetService<IMigrator>()进行访问。

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

您将需要以下其他using

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

和类似的代码:

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

答案 1 :(得分:2)

您可以通过下拉一些较低级别的组件来做到这一点。

dbContext.GetService<IMigrator>().Migrate(targetMigration);

使用常量Migration.InitialDatabase还原所有迁移。

Migration.InitialDatabase

  • 命名空间: Microsoft.EntityFrameworkCore.Migrations
  • 程序集:Microsoft.EntityFrameworkCore.Relational.dll
  • 说明:空数据库的迁移标识符。
  • 声明: public const string InitialDatabase;

参考: https://github.com/aspnet/EntityFrameworkCore/issues/9968#issuecomment-335295576