C# 通过migrate.exe手动运行代码优先迁移
我目前正在尝试使用migrate.exe工具通过命令行运行迁移 我的项目结构如下:C# 通过migrate.exe手动运行代码优先迁移,c#,entity-framework,asp.net-web-api,entity-framework-migrations,C#,Entity Framework,Asp.net Web Api,Entity Framework Migrations,我目前正在尝试使用migrate.exe工具通过命令行运行迁移 我的项目结构如下: Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, MyProject.Repositories.Migrations.Configuration>()); <configuration> .... <connectionStrings> <add name="My
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, MyProject.Repositories.Migrations.Configuration>());
<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 MyProject.Repositories.dll /startUpDirectory:"%current%" /connectionStringName:MyConnecitonString /startUpConfigurationFile:"%parent%\web.config"
MyProject.WebAPI—访问中方法的MyAPI项目
存储库
MyProject.Repositories—负责所有数据库工作的项目,
包括存储迁移文件的位置、配置上下文和保存配置类
当运行WebAPI项目时,迁移工作正常,因为在应用程序中设置了DB初始值设定项。\u如下所示:
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, MyProject.Repositories.Migrations.Configuration>());
<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 MyProject.Repositories.dll /startUpDirectory:"%current%" /connectionStringName:MyConnecitonString /startUpConfigurationFile:"%parent%\web.config"
我正在运行migrate.exe,如下所示:
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, MyProject.Repositories.Migrations.Configuration>());
<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 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在实际的存储库项目本身上运行此操作
编辑:
我在这方面做了更多的工作,并已将迁移的要求改为:
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.
看起来它越来越接近工作状态了…内部异常是什么?我希望我知道,没有找到任何方法可以看出您是否在没有
/startUpConfigurationFile
选项的情况下尝试过它?我认为“迁移到最新版本”是默认设置。@Stefan如果我删除了我得到的错误:在应用程序配置文件中找不到名为“MyContext”的连接字符串。
@Stefan,我知道这已经晚了2年,但我刚刚发现如果使用/verbose标志,它将显示内部异常。