发布 ASP.NET 个核心应用程序时自动执行迁移
Automatically execute migrations when publishing ASP.NET Core app
问题
在使用 Web 部署将我的 ASP 5 应用程序发布到 IIS 时,有什么方法可以自动执行迁移代码 (EF 7)?
我试过了
在project.json
中,我在scripts
中添加了这段代码:
"scripts" : {
"prepublish": ["dnx ef database update", "other commands..."],
"postpublish": ["dnx ef database update"]
}
none 为我工作。
附加信息
我按照此 link 上的说明使用 Web 部署将我的 ASP 5 RC-1 Web 应用程序部署到 IIS。
在发布设置中这样做之后,我有:
在 ASP 4 个应用程序中使用 Web 部署我有其他数据库选项:
显然这个过程现在不起作用。 https://github.com/aspnet/Home/issues/622 发布后,您应该找到名为 "profile name"-publish.ps1 的强大 shell 脚本。然后将您的命令添加到靠近此文件末尾的这三行下方。您可能希望使用 powershell 来简化调试。
'Calling Publish-AspNet' |写详细
#调用Publish-AspNet执行发布操作
Publish-AspNet -publishProperties $publishProperties -packOutput $packOutput
所以我在 ef database
命令中添加了选项 -environment
。现在有效了:
"postpublish": ["dnx ef database update -e Staging"]
我有四个不同的 appsettings.json
,每个环境都有不同的连接字符串。只需指明命令运行的环境即可。
使用context.Database.Migrate()
您可以从您的 Startup
class:
中调用它
using (var context = new MyContext(...))
{
context.Database.Migrate();
}
它将在应用程序启动时将您的数据库迁移到最新版本。但是要小心,也许注释掉这段代码,只有当你想运行你的迁移时才取消推荐。
在你Startup.csclass添加这段代码
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
{
var context = serviceScope.ServiceProvider.GetService<AppDBContext>();
context.Database.Migrate();
}
}
问题
在使用 Web 部署将我的 ASP 5 应用程序发布到 IIS 时,有什么方法可以自动执行迁移代码 (EF 7)?
我试过了
在
project.json
中,我在scripts
中添加了这段代码:"scripts" : { "prepublish": ["dnx ef database update", "other commands..."], "postpublish": ["dnx ef database update"] }
none 为我工作。
附加信息
我按照此 link 上的说明使用 Web 部署将我的 ASP 5 RC-1 Web 应用程序部署到 IIS。
在发布设置中这样做之后,我有:
在 ASP 4 个应用程序中使用 Web 部署我有其他数据库选项:
显然这个过程现在不起作用。 https://github.com/aspnet/Home/issues/622 发布后,您应该找到名为 "profile name"-publish.ps1 的强大 shell 脚本。然后将您的命令添加到靠近此文件末尾的这三行下方。您可能希望使用 powershell 来简化调试。
'Calling Publish-AspNet' |写详细
#调用Publish-AspNet执行发布操作
Publish-AspNet -publishProperties $publishProperties -packOutput $packOutput
所以我在 ef database
命令中添加了选项 -environment
。现在有效了:
"postpublish": ["dnx ef database update -e Staging"]
我有四个不同的 appsettings.json
,每个环境都有不同的连接字符串。只需指明命令运行的环境即可。
使用context.Database.Migrate()
您可以从您的 Startup
class:
using (var context = new MyContext(...))
{
context.Database.Migrate();
}
它将在应用程序启动时将您的数据库迁移到最新版本。但是要小心,也许注释掉这段代码,只有当你想运行你的迁移时才取消推荐。
在你Startup.csclass添加这段代码
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
{
var context = serviceScope.ServiceProvider.GetService<AppDBContext>();
context.Database.Migrate();
}
}