如何使用 .MigrateAsync() 方法执行 if 语句?

问题描述 投票:0回答:1

我现在使用这个代码:

public static class DataHelper
{
    public static async Task ManageDataAsync(IServiceProvider svcProvider)
    {
        var dbContextSvc = svcProvider.GetRequiredService<AppDbContext>();

        await dbContextSvc.Database.MigrateAsync();
    }
}

我打电话:

await DataHelper.ManageDataAsync(scope.ServiceProvider);

Program.cs
班。

问题是,当我第一次运行该应用程序时,如果数据库尚未更新,它会完美运行,但是当我在数据库更新后第二次运行它时,它会崩溃并说数据库已更新已经更新了。

如何才能有一个 if 语句,仅在数据库尚未更新时才更新数据库,并在已更新时忽略此调用?

c# entity-framework-core .net-8.0
1个回答
0
投票

您可以使用

GetPendingMigrations\[Async\]
检查是否有任何待处理的迁移,如果没有则跳过
Migrate[Async]

public static class DataHelper
{
    public static async Task ManageDataAsync( IServiceProvider sp, CancellationToken cancellationToken = default )
    {
        if( sp is null ) throw new ArgumentNullException( nameof(sp) );

        //

        using AppDbContext db = sp.GetRequiredService<AppDbContext>();

        // https://learn.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.relationaldatabasefacadeextensions.getpendingmigrationsasync
        IEnumerable<String> pendingMigrationIds = await context.Database.GetPendingMigrationsAsync( cancellationToken ).ConfigureAwait(false);

        if( pendingMigrationIds.Any() )
        {
            await db.Database.MigrateAsync();
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.