问题
使用Web Deploy将我的ASP 5应用程序发布到IIS时,有什么办法可以自动执行迁移代码(EF 7)吗?
我试过
在project.json
中,我在scripts
中添加了此代码:
"scripts" : {
"prepublish": ["dnx ef database update", "other commands..."],
"postpublish": ["dnx ef database update"]
}
没有人对我有用。
其他信息
我按照此link上的说明使用Web部署将我的ASP 5 RC-1 Web应用程序部署到IIS。
在发布设置中执行此操作后,我有:
在ASP 4应用程序中使用Web部署我有其他数据库选项:
答案 0 :(得分:5)
您可以从Startup
课程中调用此内容:
using (var context = new MyContext(...))
{
context.Database.Migrate();
}
它会在应用程序启动时将您的数据库迁移到最新版本。但要小心这样做,可能会注释掉这些代码,并且仅在您想要运行迁移时才推荐使用。
答案 1 :(得分:1)
显然这个过程现在不起作用。 https://github.com/aspnet/Home/issues/622发布后,您应找到名为“profile name”-publish.ps1的power shell脚本。然后在靠近此文件末尾的这三行下面添加命令。您可能希望使用powershell使其更容易调试。
'Calling Publish-AspNet'|写冗长
#call Publish-AspNet执行发布操作
Publish-AspNet -publishProperties $ publishProperties -packOutput $ packOutput
答案 2 :(得分:1)
所以我在我的-environment
命令中添加了ef database
选项。现在它起作用了:
"postpublish": ["dnx ef database update -e Staging"]
我有四个不同的appsettings.json
,每个环境都有不同的连接字符串。只需要指示命令工作的环境。
答案 3 :(得分:0)
在您的Startup.cs类中添加此代码
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
{
var context = serviceScope.ServiceProvider.GetService<AppDBContext>();
context.Database.Migrate();
}
}