我有两个用于迁移的文件夹(AuthContext和UserProfileContext),每个文件夹都有自己的迁移和一些自定义sql,以便以后运行以进行数据迁移等等。
使用包管理器控制台时,此工作正常。我
然后在新数据库中一切都非常开心,迁移执行的数据在需要的地方洗牌。
我试图通过以下方式测试发布的迁移:
好的,它发布得很好;然而,当我去看数据库时,什么也没发生!它没有创建必要的表,列或数据移动。
TLDR;发布到Azure后,代码优先迁移未运行
更新1 我尝试过以下任意组合:只有一个连接字符串,因此我猜测不是问题,并检查执行迁移。
发布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,实际上未提及的那个从我的应用程序中首先被点击。
所以现在我必须弄清楚如何让它包含多个上下文,或者将我的所有内容组合到一个上下文中。
答案 0 :(得分:10)
这篇文章的答案不是很详细。
本文解释了为解决类似问题我必须做的事情: https://blogs.msdn.microsoft.com/webdev/2014/04/08/ef-code-first-migrations-deployment-to-an-azure-cloud-service/
我将大致描述下面我必须采取的步骤:
第1步 将连接字符串添加到dbContexts,在我的情况下,它们都是相同的。
第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克隆操作中继承来的。因此,正在迁移错误的数据库。