迁移模型在Azure表中自动完成.Net CORE
迁移模型在Azure表中自动完成.Net CORE
我使用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日志?
在Azure表中自动迁移模型 .Net CORE
在使用Azure表进行模型迁移时,有时会出现问题。这个问题的主要原因是使用了错误的方法来迁移模型。虽然MyContext.Database.Migrate();
这种方法对于拥有本地数据库的应用程序是很好的,但大多数应用程序需要更强大的部署策略,比如生成SQL脚本。
为了解决这个问题,可以在Startup.cs的Configure方法中添加以下代码:
using (var scope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope()) { scope.ServiceProvider.GetRequiredService<ApplicationDbContext>().Database.Migrate(); }
这段代码的作用是在部署到Azure时自动迁移数据库模型。更多详细信息可以参考这个SO thread。
然而,如果在尝试查看网站时出现以下错误信息:"An error occurred while starting the application. .NET Core 4.6.27317.07 X64 v4.0.0.0 | Microsoft.AspNetCore.Hosting version 2.2.0-rtm-35687 | Microsoft Windows 10.0.14393|",则可能是由于这段代码引起的。
为了解决这个问题,可以参考这个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
的条件。
这将在包含.sln
文件的根目录中创建一个名为filename.sql
的文件。