使用Entity Framework 5.0,我试图在我的MVC网站的启动例程中手动迁移代码优先的数据库。为此,我首先创建一个DbContext实例,然后运行以下代码:

var migrator = new MigrateDatabaseToLatestVersion<DataContext, Configuration>();
migrator.InitializeDatabase(this.dataContext);

我假设与dataContext的连接关联的数据库将是已迁移的数据库。似乎并非如此。而是总是尝试在本地SQLExpress实例上迁移数据库。

MigrateDatabaseToLatestVersion构造函数有一个重载,它使用一个数据库连接字符串名称,但是我的项目正在使用Azure,并且不使用标准的ConnectionStrings配置部分。理想情况下,我只是将可用的连接字符串传递给它。这可能吗?

最佳答案

解决方案是完全绕过MigrateDatabaseToLatestVersion类。它只是DbMigration类的薄包装,如shown in the source code

最后,我编写了以下代码:

var database = this.dataContext.Database;
var migrationConfiguration = new Configuration();
migrationConfiguration.TargetDatabase = new DbConnectionInfo(database.Connection.ConnectionString, "System.Data.SqlClient");
var migrator = new DbMigrator(migrationConfiguration);
migrator.Update();

10-01 01:33