如何在ASP.NET Core 6应用启动时执行EF migrations?
ASP.NET 6 启动时自动执行EF Core Migrations的修改方案
你只需要在现有服务注册的代码后,构建WebApplication实例,通过依赖注入作用域拿到配置完成的MyContext实例,再执行Migrate方法即可,完整修改后的代码如下:
var builder = WebApplication.CreateBuilder(args); var connectionString = builder.Configuration.GetConnectionString("DefaultConnection"); var serverVersion = new MySqlServerVersion(new Version(8, 0, 23)); builder.Services.AddDbContext<MyContext>(x => x.UseMySql(connectionString, serverVersion) .LogTo(Console.WriteLine, LogLevel.Information) .EnableSensitiveDataLogging() .EnableDetailedErrors()); // 新增执行迁移的代码开始 var app = builder.Build(); // 创建服务作用域获取已完成配置的DbContext实例 using var scope = app.Services.CreateScope(); var dbContext = scope.ServiceProvider.GetRequiredService<MyContext>(); // 执行迁移操作 dbContext.Database.Migrate(); // 原有业务的中间件配置、路由配置请写在这之后 // 例如 app.MapControllers(); 等业务配置代码 app.Run(); // 新增代码结束
注意事项
- 该方案适合单实例部署场景/开发环境使用,多实例生产环境不建议直接在应用启动时执行迁移,可能出现并发执行迁移导致的锁库问题,生产环境建议单独执行迁移脚本
Migrate()方法会自动比对数据库现有结构和项目中的迁移文件,自动执行所有未应用的迁移,若目标数据库不存在也会自动创建- 执行前请确保你已经通过EF Core工具生成了对应的迁移文件,且项目引用了
Microsoft.EntityFrameworkCore.Tools相关包
内容的提问来源于stack exchange,提问作者Aishwarya
相关产品推荐
相关产品推荐

