2012-09-12 70 views
1

使用实体框架5.0,我试图在我的MVC站点的启动例程中手动迁移我的代码优先数据库。要做到这一点,我第一次创建的DbContext实例,然后运行下面的代码:实体框架迁移器的连接

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

我以为用的DataContext的连接关联的数据库将是一个迁移。但似乎并非如此。相反,它总是尝试在本地SQLExpress实例上迁移数据库。

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

回答

7

解决方案是完全绕过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();