自动在Azure表中迁移模型.Net CORE

时间:2019-03-18 14:06:13

标签: azure entity-framework-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日志?

2 个答案:

答案 0 :(得分:0)

  

这种方法(MyContext.Database.Migrate();)并不适合所有人。虽然具有本地数据库的应用程序非常好,但大多数应用程序将需要更强大的部署策略,例如生成SQL脚本。

在Azure上部署时,可以在Startup.cs的Configure方法中添加以下代码

using (var scope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
{
    scope.ServiceProvider.GetRequiredService<ApplicationDbContext>().Database.Migrate();
}

有关更多详细信息,您可以参考此SO thread

答案 1 :(得分:0)

显然,没有办法在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的文件。