我正在使用Entity Framework .Net CORE 2.2作为我的数据库模型和我正在使用的代码
public void Configure(IApplicationBuilder app, IHostingEnvironment env, MyContextModel MyContext) {
[snipped for clarity]
MyContext.Database.Migrate();
}
操作任何迁移到数据库中。它在本地工作正常,根据需要运行任何更改。如果我将项目发布到Azure,所有内容都可以构建并上传,但是当网站启动时,我会收到消息
"An error occurred while starting the application."
在浏览器窗口中,表格保持不变。我已经删除并重新发布没有MyContext.Database.Migrate();
并且网站开始正常,所以我确定这与导致问题的自动迁移有关。我用Google搜索并尝试将线放在DbInitializer
和其他各个地方,没有运气。
我已经检查了Cloud Explorer并且我已登录,因此没有权限问题。
任何想法我缺少什么或如何(以及如何)我应该阅读一些Azure日志?
这种方法(
MyContext.Database.Migrate();
)并不适合所有人。虽然它对于具有本地数据库的应用程序非常有用,但大多数应用程序都需要更强大的部署策略,如生成SQL脚本。
在azure上部署时,可以在Startup.cs的Configure方法中添加以下代码
using (var scope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
{
scope.ServiceProvider.GetRequiredService<ApplicationDbContext>().Database.Migrate();
}
有关更多详细信息,请参阅此SO thread。
显然没有办法在Entity Framework CORE中运行迁移。直到几个月前,在Visual Studio中发布的选项有一个“执行迁移”复选框,但现在已经消失了。
你可以尝试跑步
dotnet ef database update
或者一些针对服务器的类似脚本,但这带来了太多错误。所以我试着生成SQL脚本来运行
dotnet ef migrations script
各种开关和诸如此类的东西,但带来了不同的错误。最终我发现了这个。
Script-Migration -from 20190306131332_migration1 -o fileName.sql
它为我成功生成SQL以手动对数据库运行。
-from
是最后一次迁移,所以如果我想获得自migration1以来的所有更改(即migration2,migration3等),migration1是-from
标准
这将在filename.sql
文件所在的根目录中创建一个名为.sln
的文件。