我有两个用于迁移的文件夹(AuthContext和UserProfileContext),每个文件夹都有自己的迁移和一些用于数据迁移等的自定义sql代码。
在使用包管理器控制台时,这个方法很有效:
1. 从生产中还原 2. 运行Update-Database -ConfigurationTypeName Migrations.Auth.Configuration 3. 运行Update-Database -ConfigurationTypeName Migrations.UserProfile.Configuration
然后,在新数据库中,进行了必要的迁移并重新排列了数据。
我试图测试发布时的迁移:
1. 在开发数据库上恢复生产 2. 单个连接字符串(所有上下文都使用相同的连接字符串)指向开发数据库 3. 发布到Azure网站 4. 勾选应用“Code First”迁移框 5. 选择单个连接字符串
它成功发布;但是,当我查看数据库时,什么都没有发生!它没有创建必要的表、列或数据移动。
总之:发布到Azure后,Code First迁移未运行。
更新1:我已经尝试过任何组合:只有一个单个连接字符串,所以我猜那不是问题,并且“执行迁移”被勾选。
在发布时,该API可以运行,但不会更改数据库。我想也许我需要首先触发它,但是当我尝试使用API时(现在当然依赖于新的数据库设置),我只会得到随机错误,并且数据库仍然没有改变。
我看到有些地方提到需要向我的Startup类中添加一些内容,但是我不知道该如何继续。
更新2:通过向连接字符串中添加“Persist Security Info=True”解决了一个问题。现在它实际上连接到数据库并调用我的API;但是,没有迁移正在运行。我在Azure开发环境上附加了调试器并进行了步进操作……在我的第一个数据库调用上,它步入了与所涉及的Migration相关的Configuration类,然后就出问题了,我无法跟踪到错误。
在使用包管理器控制台时,这个方法很有效:
1. 从生产中还原 2. 运行Update-Database -ConfigurationTypeName Migrations.Auth.Configuration 3. 运行Update-Database -ConfigurationTypeName Migrations.UserProfile.Configuration
然后,在新数据库中,进行了必要的迁移并重新排列了数据。
我试图测试发布时的迁移:
1. 在开发数据库上恢复生产 2. 单个连接字符串(所有上下文都使用相同的连接字符串)指向开发数据库 3. 发布到Azure网站 4. 勾选应用“Code First”迁移框 5. 选择单个连接字符串
它成功发布;但是,当我查看数据库时,什么都没有发生!它没有创建必要的表、列或数据移动。
总之:发布到Azure后,Code First迁移未运行。
更新1:我已经尝试过任何组合:只有一个单个连接字符串,所以我猜那不是问题,并且“执行迁移”被勾选。
在发布时,该API可以运行,但不会更改数据库。我想也许我需要首先触发它,但是当我尝试使用API时(现在当然依赖于新的数据库设置),我只会得到随机错误,并且数据库仍然没有改变。
我看到有些地方提到需要向我的Startup类中添加一些内容,但是我不知道该如何继续。
更新2:通过向连接字符串中添加“Persist Security Info=True”解决了一个问题。现在它实际上连接到数据库并调用我的API;但是,没有迁移正在运行。我在Azure开发环境上附加了调试器并进行了步进操作……在我的第一个数据库调用上,它步入了与所涉及的Migration相关的Configuration类,然后就出问题了,我无法跟踪到错误。
public Configuration()
{
AutomaticMigrationsEnabled = false;
MigrationsDirectory = @"Migrations\Auth";
ContextKey = "AuthContext";
}
更新3
好的,我深入研究了一下,第一次访问数据库时出现了错误。是的,这很有道理,因为模型已经改变了,但我已经进行了迁移,并启用和检查了它们!再次强调,当在包管理器控制台中运行“Update-Database”时,它可以正常工作,但在发布到Azure期间使用Execute Code First Migrations时却不行。
与“AuthContext”上下文相关联的模型自创建数据库以来已更改。请考虑使用Code First Migrations来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。
更新4
好的,我找到了根本问题所在。VS仅在我的数据库上下文中设置了额外的web.config属性,其中一个没有被提及,实际上是从我的应用程序中首先访问的。
所以现在我必须想办法使其包含多个上下文,或者将所有内容合并到单个上下文中。