我想在ASP.NET Core 2.0和EntityFramework Core 2.0的應用程序啓動時自動運行數據庫遷移。在應用程序啓動時使用Entity Framework ASP.NET Core運行數據庫遷移
我找到了Run database migrations using Entity Framework core on application start。但是,我的連接字符串存儲在環境變量中,因此只有在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();
// }
}
爲什麼不直接調用步驟來解決'db.Database.Migrate()'的'配置()'方法的結束?連接字符串設置後。 –
如果我將'ClientContext db'參數添加到'Configure'方法中,'ClientContext'將在Configure'調用之前被實例化。 'ClientContext'獲取'options'作爲構造函數參數,該構造函數參數試圖在'Configuration'對象被配置(或事件實例化)之前檢索'AppService'連接字符串。或者我的理解錯了? – alik