部署到Azure后,EF Code首次迁移未运行

时间:2015-05-16 20:20:10

标签: entity-framework azure ef-code-first ef-migrations

我有两个用于迁移的文件夹(AuthContext和UserProfileContext),每个文件夹都有自己的迁移和一些自定义sql,以便以后运行以进行数据迁移等等。

使用包管理器控制台时,此工作正常。我

  1. 从生产中恢复
  2. 运行Update-Database -ConfigurationTypeName Migrations.Auth.Configuration
  3. 运行Update-Database -ConfigurationTypeName Migrations.UserProfile.Configuration
  4. 然后在新数据库中一切都非常开心,迁移执行的数据在需要的地方洗牌。

    我试图通过以下方式测试发布的迁移:

    1. 在dev数据库上恢复生产
    2. 指向dev数据库
    3. 的单个连接字符串(所有上下文使用相同的)
    4. 发布到azure网站
    5. 选中“应用代码优先迁移”复选框
    6. 选择单个连接字符串
    7. 好的,它发布得很好;然而,当我去看数据库时,什么也没发生!它没有创建必要的表,列或数据移动。

        

      TLDR;发布到Azure后,代码优先迁移未运行

      更新1 我尝试过以下任意组合:只有一个连接字符串,因此我猜测不是问题,并检查执行迁移。 enter image description here

      发布api运行但未进行数据库更改。我想也许我需要首先点击它,但是当我尝试使用api(现在当然依赖于新的数据库设置)时我只是得到随机错误,并且数据库仍然没有改变。

      我看到有一些人提到需要在我的Startup课程中添加内容,但我不确定如何继续。

      更新2 我通过添加" Persist Security Info = True"解决了一个问题。到我的连接字符串。现在它实际连接到数据库并调用我的API;但是,没有正在运行的迁移。 我将调试器附加到Azure开发环境并逐步完成...在我的第一个数据库调用中,它进入了有关迁移的Configuration类,然后是barfs,我无法追踪错误。

      public Configuration()
      {
          AutomaticMigrationsEnabled = false;
          MigrationsDirectory = @"Migrations\Auth";
          ContextKey = "AuthContext";
      }
      

      更新3

      好的,挖了下来,第一次碰到数据库我们就错了。是的,这是有道理的,因为模型已经改变,但我已经进行了迁移,启用和检查!同样,它在运行" Update-Database"时运行正常。从包管理器控制台,但不是在发布到Azure期间使用执行代码优先迁移

        

      支持' AuthContext'自从以来情境发生了变化   数据库已创建。考虑使用Code First Migrations进行更新   数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。

      更新4 好的,我在这里找到了根本问题。 VS正在我的一个数据库上下文中为databaseInitializer设置额外的web.config attrib,实际上未提及的那个从我的应用程序中首先被点击。

      所以现在我必须弄清楚如何让它包含多个上下文,或者将我的所有内容组合到一个上下文中。

3 个答案:

答案 0 :(得分:10)

这篇文章的答案不是很详细。

本文解释了为解决类似问题我必须做的事情: https://blogs.msdn.microsoft.com/webdev/2014/04/08/ef-code-first-migrations-deployment-to-an-azure-cloud-service/

我将大致描述下面我必须采取的步骤:

第1步 将连接字符串添加到dbContexts,在我的情况下,它们都是相同的。

enter image description here

第2步 将其添加到您的web.config

 <appSettings>
    <add key="MigrateDatabaseToLatestVersion" value="true"/>
  </appSettings>

第3步 并将其添加到global.asax.cs / Startup.cs(OWIN启动)

的底部
    var configuration = new Migrations.Configuration();
    var migrator = new DbMigrator(configuration);
    migrator.Update();

答案 1 :(得分:3)

解决!总结后代的解决方案:

启用代码优先迁移仅允许每个复选框选中一个基本连接字符串,无论有多少上下文迁移到该基本连接字符串。所以在我的情况下,我将两个问题分成了两个不同的连接字符串。

然后我遇到其他错误,并确定如果您将基本连接字符串更改为模型支持asp标识,则需要包含(一次发布)附加标记库(“AuthContext”,throwIfV1Schema:false)< / p>

答案 2 :(得分:0)

对于有此问题并且可能忽略了以下内容的任何人:请确保检查是否已在Web.config文件和/或Azure上的应用程序设置中正确设置了连接字符串。这包括DefaultConnection和DefaultConnection_DatabasePublish。

在我们的例子中,前者是正确的,但后者包含错误的数据库实例,因为它是从App Service克隆操作中继承来的。因此,正在迁移错误的数据库。