3

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

我的项目结构如下:

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

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

运行 WebAPI 项目时迁移工作正常,因为 DB 初始化程序在 Application_Start 中设置如下:

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

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

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

编辑:我一直在做更多的工作,并且已经改变了我对迁移的要求:

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.

看来离上班越来越近了……

4

0 回答 0