22

我有一个项目,我试图从 SQL Server 移植到 PostgreSQL。除了我无法DbProviderFactory使用 Npgsql 之外,我相信我几乎已经完成了所有工作。

Factory = DbProviderFactories.GetFactory("Npgsql");

产量

未处理的异常:System.Configuration.ConfigurationErrorsException:找不到或加载已注册的 .Net Framework 数据提供程序。

我该如何解决?

4

5 回答 5

15

尝试在你的 app.config 中定义一个工厂:

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

通过http://fxjr.blogspot.pt/2013/06/npgsql-code-first-entity-framework-431.html

于 2013-11-08T19:28:38.163 回答
9

您是否阅读了精美手册中的第 3.4 节“将 Npgsql 与 ProviderFactory 一起使用” ?

于 2010-08-02T10:10:27.430 回答
1

type属性值在DbProviderFactories条目中很重要。

对我来说,版本号不正确。正确的版本是:

<system.data>
  <DbProviderFactories>
    <add name="Npgsql Data Provider" 
         invariant="Npgsql" 
         support="FF" 
         description=".Net Framework Data Provider for Postgresql Server" 
         type="Npgsql.NpgsqlFactory, Npgsql, Version=2.2.3.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" />
  </DbProviderFactories>
</system.data>

您可以使用以下方法检索项目中的值:

typeof(Npgsql.NpgsqlFactory).AssemblyQualifiedName
于 2015-01-11T13:42:19.863 回答
1

这些是为我解决它的步骤:

(1) 将 DbFactory 提供程序添加到位于 .NET Microsoft Frameworking 文件夹中的 machine.config 文件中

(2) 使用gacutil在GAC中注册npgsql.dll和mono.security.dll


分步详细信息:

(1) 将 DbFactory 提供程序添加到 machine.config

一个。转到相关的 NET 框架配置目录(例如 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config)

湾。编辑 machine.config 文件并将以下行添加到 DbProviderFactories

<DbProviderFactories>
    <add name="Npgsql Data Provider" 
         invariant="Npgsql" 
         support="FF" 
         description=".Net Framework Data Provider for Postgresql Server" 
         type="Npgsql.NpgsqlFactory, Npgsql"/>
  </DbProviderFactories>

(2)在GAC中注册npgsql.dll和mono.security.dll

一个。检查 npgsql 和 mono.security 是否在 GAC 文件夹中(我的 GAC 文件夹位于 C:\Windows\Microsoft.NET\assembly\GAC_MSIL)

如果没有,则使用 gacutil /i npgsql.dll 在命令提示符下使用 gacutil 将 npgsql 安装到 GAC

于 2015-12-28T12:54:20.447 回答
0

在 GAC 中注册 ngsql 和 mono.security dll,并在 machine.config 中为 [32 位和 64 位版本] 添加 dbfactory 提供程序

于 2013-11-07T15:09:59.553 回答