【发布时间】:2015-05-16 20:20:09
【问题描述】:
我有两个用于迁移的文件夹(AuthContext 和 UserProfileContext),每个文件夹都有自己的迁移和一些自定义 sql,以便之后运行以进行数据迁移等。
这在使用包管理器控制台时可以正常工作。我
- 从生产中恢复
- 运行 Update-Database -ConfigurationTypeName Migrations.Auth.Configuration
- 运行 Update-Database -ConfigurationTypeName Migrations.UserProfile.Configuration
然后在新数据库中一切都非常愉快,迁移执行的数据在需要的地方打乱了。
我尝试通过以下方式测试发布时的迁移:
- 在开发数据库上恢复生产
- 指向开发数据库的单个连接字符串(所有上下文使用相同)
- 发布到 azure 网站
- 选中应用代码优先迁移复选框
- 选择了那个单一的连接字符串
好的,它发布得很好;但是,当我去查看数据库时,什么也没发生!它没有创建必要的表、列或数据移动。
TLDR;代码优先迁移在发布到 Azure 后未运行
更新 1 我尝试了以下任何组合:只有一个连接字符串,所以我猜这不是问题,并检查了执行迁移。
在发布时,api 运行但没有对数据库进行更改。我想也许我需要先点击它,但是当我尝试使用 api(现在当然依赖于新的数据库设置)时,我得到了随机错误,并且数据库仍然没有改变。
我看到了一些关于需要在我的 Startup 类中添加一些内容的参考资料,但我不确定如何继续。
更新 2 我通过在我的连接字符串中添加“Persist Security Info=True”解决了一个问题。现在它实际上连接到数据库并调用我的 API;但是,没有迁移正在运行。 我将调试器附加到 Azure 开发环境并逐步完成...在我的第一个数据库中调用它进入有问题的迁移的配置类,然后是 barfs,我无法追踪错误。
public Configuration()
{
AutomaticMigrationsEnabled = false;
MigrationsDirectory = @"Migrations\Auth";
ContextKey = "AuthContext";
}
更新 3
好的,挖出来,第一次访问数据库时我们出错了。是的,这是有道理的,因为模型已经改变,但是我已经进行了迁移,启用并检查了!同样,从包管理器控制台运行“更新数据库”时它工作正常,但在发布到 Azure 期间使用执行代码优先迁移时却不行
支持“AuthContext”上下文的模型自 数据库已创建。考虑使用 Code First 迁移来更新 数据库 (http://go.microsoft.com/fwlink/?LinkId=238269)。
更新 4 好的,我在这里找到了根本问题。 VS 仅在我的一个数据库上下文中为 databaseInitializer 设置了额外的 web.config 属性,实际上未提及的那个是我的应用程序首先命中的。
所以现在我必须弄清楚如何让它包含多个上下文,或者将我的所有内容组合到一个上下文中。
【问题讨论】:
-
你看看这个帖子blogs.msdn.com/b/webdev/archive/2014/04/09/…,看起来你可能需要在 Global.asax 的 Application_Start 代码中添加代码
-
@J.W.谢谢,我已经看到了,它专门用于 Azure 云服务,我正在使用 Azure 网站,据说你不需要做任何额外的事情......
-
我认为无论是什么项目,都必须确保db迁移代码运行。
-
@J.W.链接文章中的片段表明相反:“另一个选项是设置 Web.config 转换以对 Web.config 文件进行与单击执行代码优先迁移时 Visual Studio 所做的相同的更改”。 Visual Studio应该在部署期间设置必要的迁移,事实上,配置类被调用很明显,正在发生一些事情......
-
我明白了,你有多个上下文,这是否意味着你有多个数据库,通常不能很好地与 EF 配合使用。
标签: entity-framework azure ef-code-first entity-framework-migrations