Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 在Azure应用程序服务上自动运行EF迁移_Entity Framework_Azure_Ef Code First_Migration - Fatal编程技术网

Entity framework 在Azure应用程序服务上自动运行EF迁移

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迁移脚本可用于作业: 为您的数据库准备好一个好的备份策略,这样您就可以在转移到生

我们的应用程序在Azure上运行,具有数据库的读/写权限。我们并不热衷于为生产应用程序启用EF的自动迁移,因为DB用户帐户不是所有者,所以它没有运行迁移的权限

过去,我使用脚本运行migrate.exe来应用迁移,并对结果感到满意。有没有办法在azure应用程序服务上实现这一点


当前正在从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”,这使它在部署后立即运行,然后不断地运行脚本。