我目前正在尝试使用migrate.exe工具通过命令行运行迁移。
我的项目结构如下:
运行WebAPI项目时,MyProject.WebAPI - 访问方法的我的API项目 存储库
MyProject.Repositories - 负责所有数据库工作的项目, 包括存储迁移文件的位置,配置上下文和保持配置类
迁移工作正常,因为在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.
看起来它正在接近工作......