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

Jos*_*ana 6 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

然后在新数据库中一切都很开心,迁移执行的数据在需要的地方洗牌.

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

  1. 在dev数据库上恢复生产
  2. 单个连接字符串(所有上下文使用相同的)指向dev数据库
  3. 发布到azure网站
  4. 选中"应用代码优先迁移"复选框
  5. 选择单个连接字符串

好的,它发布得很好; 然而,当我去看数据库时,什么也没发生!它没有创建必要的表,列或数据移动.

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

更新1 我尝试了下面的任何组合:只有一个连接字符串,所以我猜这不是问题,并检查执行迁移. 在此输入图像描述

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

我已经看到有一些关于需要在我的Startup类中添加内容的引用,但我不知道如何继续.

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

public Configuration()
{
    AutomaticMigrationsEnabled = false;
    MigrationsDirectory = @"Migrations\Auth";
    ContextKey = "AuthContext";
}
Run Code Online (Sandbox Code Playgroud)

更新3

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

自创建数据库以来,支持'AuthContext'上下文的模型已更改.请考虑使用"代码优先迁移"来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269).

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

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

que*_*que 10

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

本文解释了为解决类似问题我必须采取的措施:https: //blogs.msdn.microsoft.com/webdev/2014/04/08/ef-code-first-migrations-deployment-to-an- Azure的云服务/

我将粗略描述下面我必须采取的步骤:

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

在此输入图像描述

步骤2 将此添加到您的web.config

 <appSettings>
    <add key="MigrateDatabaseToLatestVersion" value="true"/>
  </appSettings>
Run Code Online (Sandbox Code Playgroud)

步骤3 并将其添加到global.asax.cs/Startup.cs(OWIN启动)的底部

    var configuration = new Migrations.Configuration();
    var migrator = new DbMigrator(configuration);
    migrator.Update();
Run Code Online (Sandbox Code Playgroud)


Jos*_*ana 4

解决了!为后代总结解决方案:

启用代码优先迁移仅针对每个选中的复选框启用一个基本连接字符串,无论有多少上下文针对该基本连接字符串进行迁移。因此,就我而言,我将两个有问题的连接字符串分解为两个不同的连接字符串。

然后我遇到了其他错误,并发现如果您将基本连接字符串更改为支持 asp 身份的模型,则需要包含(一次发布)附加标志 base("AuthContext" , throwIfV1Schema: false)