我正在开发Web应用程序,并且正在附近开发小型命令行应用程序,该应用程序在数据库中安装ef核心表。最后可以通过调用dbContext.Database.Migrate();
来完成此工作。
现在,我想提供unistall
选项(与此应用一起提供)。
但是如何删除迁移(意味着从我的代码中调用dotnet ef database update 0
的功能)?
它可能不是一个命令调用(与dbContext.Database.Migrate();
一样)。但是,在迁移组装和调用“ Downs”的所有迁移中都有循环代码。
答案 0 :(得分:4)
EF Core仅公开提供用于迁移最新版本的dbContext.Database.Migrate();
扩展方法。 EF Core文档的Applying migrations at runtime部分对此进行了提及,其中还包含以下内容
注意
此方法建立在
IMigrator
服务的基础上,该服务可用于更高级的方案。使用DbContext.GetService<IMigrator>()
进行访问。
为您提供了解决方案,因为IMigrator
界面提供了Migrate
方法,该方法接受与targetMigration
或dotnet 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
public const string InitialDatabase;
参考: https://github.com/aspnet/EntityFrameworkCore/issues/9968#issuecomment-335295576