Entity framework 在Azure应用程序服务上自动运行EF迁移
我们的应用程序在Azure上运行,具有数据库的读/写权限。我们并不热衷于为生产应用程序启用EF的自动迁移,因为DB用户帐户不是所有者,所以它没有运行迁移的权限 过去,我使用脚本运行migrate.exe来应用迁移,并对结果感到满意。有没有办法在azure应用程序服务上实现这一点Entity framework 在Azure应用程序服务上自动运行EF迁移,entity-framework,azure,ef-code-first,migration,Entity Framework,Azure,Ef Code First,Migration,我们的应用程序在Azure上运行,具有数据库的读/写权限。我们并不热衷于为生产应用程序启用EF的自动迁移,因为DB用户帐户不是所有者,所以它没有运行迁移的权限 过去,我使用脚本运行migrate.exe来应用迁移,并对结果感到满意。有没有办法在azure应用程序服务上实现这一点 当前正在从visual studio运行迁移。一个选项是使用Web作业按计划或按需运行迁移脚本: 您可能希望设置CI部署,以便当前EF迁移脚本可用于作业: 为您的数据库准备好一个好的备份策略,这样您就可以在转移到生
当前正在从visual studio运行迁移。一个选项是使用Web作业按计划或按需运行迁移脚本: 您可能希望设置CI部署,以便当前EF迁移脚本可用于作业: 为您的数据库准备好一个好的备份策略,这样您就可以在转移到生产环境之前,在转移环境中冒烟测试已完成的迁移(最好是以自动方式)
祝你好运 我最后做的是将一个小型控制台应用程序作为web作业,我将其设置为手动触发。这可确保生成migrator.exe并将其放置在我知道的位置
public static void Main(String[] args)
{
Log("Starting");
var cs = GetConnectionString(args);
if(String.IsNullOrEmpty(cs))
{
Log($"Connnection must be passed as a command argument, or in the environment variable {ConnectionStringVar}, or in the appSetting {ConnectionStringVar} (in that order).");
Log("Exiting without running migrations.");
return;
}
try
{
var c = new Configuration();
c.TargetDatabase = new DbConnectionInfo(cs, "System.Data.SqlClient");
var migrator = new DbMigrator(c);
Log($"{migrator.GetPendingMigrations().Count()} pending migrations");
migrator.Update();
Log("Complete");
}
catch (Exception e)
{
Log($"Failed: {e.GetType().FullName} {e.Message}");
throw;
}
}
然后我生成了一个自定义部署脚本:
在该脚本中,我调用运行迁移的migrate.exe。一直工作得很好。谢谢。我已经有了CI部署工作。所以这应该不会太难。出于某种原因,我认为web作业的用途与此不同,但这看起来会起作用。因此,我有一个运行migrate.exe并应用迁移的.ps1脚本。在azure的AddWebJob下,可以选择连续运行或通过触发器运行。在站点成功构建后,我将如何运行脚本?我希望有一个“部署后触发器”来运行脚本,就像Octopus一样。我似乎不知道如何让web作业在部署后立即运行,然后在部署后再运行。我尝试使用“Continuous”,这使它在部署后立即运行,然后不断地运行脚本。