我在数据库模型中使用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日志?
答案 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
的文件。