发布后通过迁移更新数据库

时间:2019-08-28 05:03:05

标签: asp.net-core migration

我正在ASP.NET Core中开发Web API。我正在寻找一种通过[自动]发布API文件更新客户数据库的方法。 我不想使用更新数据库 谢谢

2 个答案:

答案 0 :(得分:2)

执行项目后,更新命令将自动运行

答案 1 :(得分:1)

基本上,您所需要做的只是在应用程序启动时调用context.Database.Migrate()。我最近遇到了IWebHost扩展名的实现,该扩展名允许在启动时迁移数据库上下文并运行自定义操作以使用一些默认数据为数据库播种。

public static class IWebHostExtensions
{
    public static IWebHost MigrateDbContext<TContext>(this IWebHost webHost, Action<TContext, IServiceProvider> seeder)
        where TContext : DbContext
    {
        using (var scope = webHost.Services.CreateScope())
        {
            var services = scope.ServiceProvider;

            var logger = services.GetRequiredService<ILogger<TContext>>();

            var context = services.GetService<TContext>();

            try
            {
                logger.LogInformation($"Migrating database associated with context {typeof(TContext).Name}");

                context.Database.Migrate();

                seeder(context, services);

                logger.LogInformation($"Migrated database associated with context {typeof(TContext).Name}");
            }
            catch (Exception ex)
            {
                logger.LogError(ex, $"An error occurred while migrating the database used on context {typeof(TContext).Name}");
            }
        }

        return webHost;
    }
}

用法:

public static class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args)
            .MigrateDbContext<MyDbContext>((context, services) =>
            {
                var configuration = services.GetService<IConfiguration>();

                MyDbContext.SeedAsync(context).Wait();
            })
            .Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
}