是否有可能配置migrate.exe自定义提供不使用的machine.config(Is it po

2019-10-21 12:52发布

我试图用migrate.exe是在V6的EntityFramework NuGet包提供的安装自动迁移。 我的应用程序使用PostgreSQL数据库,并使用自定义数据库提供商(Npgsql的),这需要的EntityFramework额外的配置。

Migrate.exe成功的作品,如果我添加了所需的配置到machine.config中,但是因为它需要编辑的machine.config到处迁移正在运行,这不是一个可行的解决方案。 我也想其设置为在AppVeyor构建过程的一部分,我不认为这是可能的编辑AppVeyor构建服务器的machine.config中。

如下面的错误替代编辑我试图创建一个包含旁边migrate.exe所需配置的migrate.exe.config文件machine.config中,但这并不工作和结果。

错误:有固定名称“Npgsql的” ADO.NET提供程序或者是在机器或应用程序配置文件没有注册,或者无法加载。 详情请参阅内部异常。

有另一种方式来配置migrate.exe自定义提供不使用的machine.config?

参考所需的额外的配置是

<system.data>
  <DbProviderFactories>
    <remove invariant="Npgsql" />
    <add name="Npgsql Data Provider" invariant="Npgsql" support="FF" description=".Net Framework Data Provider for Postgresql" type="Npgsql.NpgsqlFactory, Npgsql" />
  </DbProviderFactories>
</system.data>
<entityFramework>
  <defaultConnectionFactory type="Npgsql.NpgsqlConnectionFactory, Npgsql" />
  <providers>
    <provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, Npgsql.EntityFramework" />
  </providers>
</entityFramework>

Answer 1:

我只是通过这个去了(不是专门与AppVeyor,但我对我的自动生成的TeamCity服务器的工作),并能够得到它使用实体框架6.0.0.0工作。 下面是这导致了同样的错误,我正在运行的命令

.\migrate.exe
  MyProject.DataContracts.dll
  /ConnectionString:"server=localhost;user id=<myuserid>;password=<mypassword>;database=<mydatabase>"
  /connectionProviderName:Npgsql

缺少的组件被指定为我的启动项目配置文件,像这样

.\migrate.exe
  MyProject.DataContracts.dll
  /startupConfigurationFile:"..\..\..\MyStartupProject\Web.config"
  /ConnectionString:"server=localhost;user id=<myuserid>;password=<mypassword>;database=<mydatabase>"
  /connectionProviderName:Npgsql

作为参考,下面是我的Npgsql的相关章节Web.config

<system.data>
  <DbProviderFactories>
    <remove invariant="Npgsql" />
    <add name="Npgsql Data Provider" invariant="Npgsql" description="Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql" />
  </DbProviderFactories>
</system.data>

<entityFramework>
  <defaultConnectionFactory type="Npgsql.NpgsqlConnectionFactory, Npgsql.EntityFramework" />
  <providers>
    <provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, Npgsql.EntityFramework"/>
  </providers>
</entityFramework>

希望这有助于在这个问题上,谁不希望自动数据库初始化如图对方回答任何人登陆。 干杯!



Answer 2:

我无法找到另一种方式来migrate.exe配置为使用自定义提供。

到底是更好的解决方案是一个数据库初始化器添加到应用程序的实体框架的配置,它会自动运行迁移,而不是使用migrate.exe。

<entityFramework>
  <contexts>
    <context type="Assembly.ApplicationDbContext, Assembly">
      <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[Assembly.ApplicationDbContext, Assembly], [Assembly.Migrations.Configuration, Assembly]], EntityFramework" />
    </context>
  </contexts>
</entityFramework>


文章来源: Is it possible to configure a custom provider for migrate.exe without using the machine.config