Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过migrate.exe手动运行代码优先迁移_C#_Entity Framework_Asp.net Web Api_Entity Framework Migrations - Fatal编程技术网

C# 通过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

我目前正在尝试使用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"
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标志,它将显示内部异常。