在應用程序啟動時使用Entity Framework ASP.NET Core運行數據庫遷移

asp.net asp.net-core entity-framework entity-framework-core

我想在ASP.NET Core 2.0和EntityFramework Core 2.0中的應用程序啟動時自動運行數據庫遷移。

我發現在應用程序啟動時使用Entity Framework核心運行數據庫遷移 。但是,我的連接字符串存儲在環境變量中,因此在Configure方法中調用.AddEnvironmentVariables()之前不會找到它們。

如何通過持續部署和登台環境調用the db.Database.Migrate()或如何正確執行數據庫遷移(在Azure Web App中)?

public class Startup
{
    private IConfigurationRoot Configuration { get; set; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();

        services.AddDbContext<ClientContext>(options => options.UseSqlServer(this.Configuration.GetConnectionString("AppService")));
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseMvc();

        this.Configuration = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables()
            .Build();
    }

    // public void Configure(IApplicationBuilder app, ClientContext db)
    // {
    //     db.Database.Migrate();
    // }
}

一般承認的答案

基於你上面的評論,我會試試這個:

public void Configure(IApplicationBuilder app, IServiceProvider serviceProvider)
{
    app.UseMvc();

    this.Configuration = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables()
        .Build();

    var db = serviceProvider.GetService<ClientContext>();
    db.Database.Migrate();
}

這是在設置環境變量後手動解析ClientContext ,因此參數注入不會失敗。

編輯:您可以通過遵循此SO問題中的步驟來解決您獲得的錯誤



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow