.Net core 5.0 控制台应用程序引用了 .Net framework4.7.2

问题描述

我在 .Net 框架 4.7.2 中构建了一个实体框架数据访问层

我正在尝试从 .Net 核心控制台应用程序中引用它。

我不断收到错误消息 具有不变名称“Npgsql”的 ADO.NET 提供程序未在计算机或应用程序配置文件注册,或者无法加载。有关详细信息,请参阅内部异常。

我根据网络上的建议添加了以下代码,但随后错误更改为使用 system.configuration 的不同方法,并且错误变为“无法初始化配置” system.data is invalid config section

     <entityFramework>
    <providers>
      <provider invariantName="Npgsql" type="Npgsql.NpgsqlServices,EntityFramework6.Npgsql" />
      <!--<provider invariantName="System.Data.sqlClient" type="System.Data.Entity.sqlServer.sqlProviderServices,EntityFramework.sqlServer" />-->
      <provider invariantName="System.Data.sqlClient" type="System.Data.Entity.sqlServer.sqlProviderServices,EntityFramework.sqlServer" />
    </providers>
    <defaultConnectionFactory type="Npgsql.NpgsqlConnectionFactory,EntityFramework6.Npgsql" />
  </entityFramework>
  <system.data>
    <DbProviderFactories>
      <!--<add name="dotConnect for Postgresql" invariant="Devart.Data.Postgresql" description="Devart dotConnect for Postgresql" type="Devart.Data.Postgresql.PgsqlProviderFactory,Devart.Data.Postgresql,Version= 7.17.1583.0,Culture=neutral,PublicKeyToken=09af7300eec23701" />-->

      <!--<add name="Npgsql Provider" invariant="Npgsql" description=".NET Framework Data Provider for Postgresql" type="Npgsql.NpgsqlFactory,Npgsql,Version=4.1.3.0,PublicKeyToken=5d8b90d52f46fda7" />-->
      <add name="Npgsql Data Provider" invariant="Npgsql" description=".Net Data Provider for Postgresql" type="Npgsql.NpgsqlFactory,PublicKeyToken=5d8b90d52f46fda7" />

    <remove invariant="Npgsql" /><add name="Npgsql Provider" invariant="Npgsql" description=".NET Framework Data Provider for Postgresql" type="Npgsql.NpgsqlFactory,PublicKeyToken=5d8b90d52f46fda7" /></DbProviderFactories>
  </system.data>    

解决方法

对于 .NET Core,您需要调用 DbProviderFactories.RegisterFactory 而不是使用配置文件。

System.Data.Common.DbProviderFactories.RegisterFactory("NpgSql",Npgsql.NpgsqlFactory.Instance);