Entity Framework Core 如何编程执行Remove-Migration/Update-Database 0
编程执行EF Core迁移命令的实现方案
实现Update-Database 0等价功能
Update-Database 0的作用是将数据库回滚到无任何迁移应用的初始状态,你可以通过EF Core内置的IMigrator服务实现:
- 先引用命名空间
Microsoft.EntityFrameworkCore.Migrations - 调用示例代码:
// 已初始化的DbContext实例 var migrator = context.GetService<IMigrator>(); // 异步执行回滚所有迁移 await migrator.MigrateAsync(targetMigration: null); // 同步调用写法:migrator.Migrate(targetMigration: null);
如果需要回滚到指定迁移,只需将targetMigration参数替换为目标迁移的ID即可,和Package Manager控制台中Update-Database [迁移名]的用法完全一致。
实现Remove-Migration等价功能
注意:Remove-Migration本质是操作项目中的迁移源码文件,仅可在开发环境使用,禁止在生产运行时代码中调用。
实现该功能需要先安装Microsoft.EntityFrameworkCore.Design NuGet包,之后通过IMigrationsOperations服务调用:
// 引用命名空间 Microsoft.EntityFrameworkCore.Design var migrationOperations = context.GetService<IMigrationsOperations>(); // 参数分别为:项目根目录路径、迁移所在根命名空间、是否强制移除(即使迁移已应用到数据库) migrationOperations.RemoveMigration( projectDir: @"C:\your\project\root\path", rootNamespace: "YourProjectNamespace", force: false);
其中force参数设为true时等价于Remove-Migration -Force命令,即使对应迁移已经应用到数据库,也会强制删除迁移源码文件。
补充说明
你目前使用的两个API都是官方推荐的标准用法:
context.Database.GetMigrations()用于获取项目中定义的所有迁移列表context.Database.Migrate()等价于无参数的Update-Database命令,会自动应用所有待执行的迁移
内容的提问来源于stack exchange,提问作者Asif Shakir
相关产品推荐
相关产品推荐

