我正在使用Code First Migrations运行实体框架。我的新版本添加了一个表,修改了几个表,并运行了一些脚本。使用update-database在本地开发时,这非常有效。
部署后,未创建新表,我收到了客户端的错误。我将调试器附加到已部署的站点以跟踪发生的情况。它到达控制器,经历了正常的流程,并且在第一次数据库调用到新的(但实际上不存在)表时,它跳转到Configuration类进行迁移。
internal sealed class Configuration : DbMigrationsConfiguration<myProject.api.AuthContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
MigrationsDirectory = @"Migrations\Auth";
ContextKey = "myProject.api.AuthContext";
}
所以我的想法很棒,一切都很好。它遍历所有这些,返回初始数据库调用,但然后该调用返回错误,粘贴在
下面支持'AuthContext'上下文的模型自从以来发生了变化 数据库已创建。考虑使用Code First Migrations进行更新 数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。
这是令人惊讶的,因为我确实启用了代码首次迁移!使用标准的enable-migrations和add-migration,当我发出update-database命令时,它在我的本地机器上完美运行。
1)如何在部署到Azure后运行Code First迁移?
更新1
以下是我的发布设置。由于某种原因,我没有复选框选项:“执行代码优先迁移”,我猜这是问题...
答案 0 :(得分:3)
好哇!我的更新是问题所在。我从其他SO帖子中发现他有时会发生这种情况。清理和重建,然后重新启动VS,恢复了“执行代码优先迁移”功能。复选框。重新部署,一切都很完美。
答案 1 :(得分:2)
你检查了这些代码行吗?
在你的web.config中:
<appSettings>
<add key="MigrateDatabaseToLatestVersion" value="true"/>
</appSettings>
在global.asax.cs / Startup.cs(OWIN启动)中:
var configuration = new Migrations.Configuration();
var migrator = new DbMigrator(configuration);
migrator.Update();