如何通过条件判断控制.MigrateAsync()仅在未更新数据库时执行?
解决EF Core重复执行迁移报错的问题
你遇到的问题可以通过检查未应用的迁移来解决,只在数据库存在待更新的迁移时执行MigrateAsync,否则直接跳过。
修改后的DataHelper代码如下:
public static class DataHelper { public static async Task ManageDataAsync(IServiceProvider svcProvider) { var dbContextSvc = svcProvider.GetRequiredService<AppDbContext>(); // 获取所有未应用到数据库的迁移脚本 var pendingMigrations = await dbContextSvc.Database.GetPendingMigrationsAsync(); if (pendingMigrations.Any()) { // 仅当存在未应用迁移时,执行数据库更新 await dbContextSvc.Database.MigrateAsync(); } } }
Program.cs中的调用代码保持不变:
await DataHelper.ManageDataAsync(scope.ServiceProvider);
逻辑说明
GetPendingMigrationsAsync()会返回所有尚未应用到目标数据库的迁移列表:
- 如果列表不为空,说明数据库需要更新,此时执行
MigrateAsync()完成迁移; - 如果列表为空,说明数据库已经是最新状态,直接跳过迁移操作,避免触发“数据库已更新”的报错。
内容的提问来源于stack exchange,提问作者CodingIsFunYouShouldTryIt
相关产品推荐
相关产品推荐

