通过migrate.exe手动运行代码优先迁移

时间:2013-10-25 11:13:52

标签: c# entity-framework asp.net-web-api ef-migrations

我目前正在尝试使用migrate.exe工具通过命令行运行迁移。

我的项目结构如下:

  

MyProject.WebAPI - 访问方法的我的API项目   存储库

     

MyProject.Repositories - 负责所有数据库工作的项目,   包括存储迁移文件的位置,配置上下文和保持配置类

运行WebAPI项目时,

迁移工作正常,因为在Application_Start中设置了数据库初始化程序,如下所示:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, MyProject.Repositories.Migrations.Configuration>());

我不想再这样做的原因是,当我将代码安装到机器上时。我的目标是在安装时初始化数据库,因此需要能够从命令行运行迁移。要开始这样做,我在WebApi项目的bin目录中获得了migrate.exe的副本,以及MyProject.Repositories.dll

因此,我希望能够使用WebApi项目中的web.config文件来配置和运行初始化程序。其实体框架部分如下所示:

<configuration>
  ....

  <connectionStrings>
    <add name="MyConnectionString" connectionString="..." providerName="System.Data.SqlClient" />
  </connectionStrings>

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
      <contexts>
          <context type="Repositories.MyContext, MyProject.Repositories">
              <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[Repositories.MyContext, MyProject.Repositories], [Repositories.Configuration, MyProject.Repositories]], EntityFramework">
              </databaseInitializer>
          </context>
      </contexts>
  </entityFramework>
</configuration>

我正在运行migrate.exe,如下所示:

migrate.exe MyProject.Repositories.dll /startUpDirectory:"%current%" /connectionStringName:MyConnecitonString /startUpConfigurationFile:"%parent%\web.config"

current和parent只是批处理文件中设置的变量。

运行此设置时,出现以下错误:

ERROR: Failed to set database initializer of type 'System.Data.Entity.MigrateDatabaseToLatestVersion`2[[MyProject.CampaignManagerContext, MyProject.Repositories],     [Repositories.Configuration, MyProject.Repositories]], EntityFramework' 

for DbContext type 'Repositories.MyContext, MyProject.Repositories' specified in the application configuration. See inner exception for details.

这可以在两个项目之间进行,还是我必须使用自己的app.config在实际的Repositories项目本身上运行它?

编辑: 我一直在努力解决这个问题,并且已经改变了我的调用,只迁移到了:

migrate.exe MyProject.Repositories.dll /connectionString:MyConnectionString /connectionProviderName:System.Data.SqlClient

这给了我一个错误:

ERROR: Format of the initialization string does not conform to specification starting at index 0.

看起来它正在接近工作......

0 个答案:

没有答案