2

我试图让 EF 在 Linux 平台上与 Postgresql 一起工作。当我尝试连接到数据库时,我遇到了这个错误:无法找到或加载注册的 .Net Framework 数据提供程序“Npgsql 数据提供程序”。我的 app.config 文件:

<?xml version="1.0" encoding="utf-8"?>
  <configuration>
    <configSections>
      <section name="entityFramework"
        type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework" />
    </configSections>
    <system.data>
      <DbProviderFactories>
        <remove invariant="Npgsql"></remove>
        <add name="Npgsql Data Provider" 
          invariant="Npgsql" 
          description=".Net Framework Data Provider for Postgresql Server" 
          type="Npgsql.NpgsqlFactory, Npgsql, Version=4.0.0.0, Culture=neutral" />
      </DbProviderFactories>
    </system.data>
    <connectionStrings>
      <add name="MinDatabase" connectionString="Server=localhost;Port=5432;Database=postgres;User Id=postgres;Password=;CommandTimeout=20;" 
        providerName="Npgsql Data Provider" />
    </connectionStrings>
  </configuration>

如何让 Mono 加载数据提供者?

4

2 回答 2

3

错误消息包含不变名称,因此它正在寻找具有不变名称“Npgsql 数据提供者”的内容,并且您专门将 invariantName 设置为 Npgsql。因此,也许可以尝试更改为在整个配置中使用相同的名称,如下所示:

<system.data>
  <DbProviderFactories>
    <remove invariant="Npgsql"></remove>
    <add name="Npgsql" 
      invariant="Npgsql" 
      description=".Net Framework Data Provider for Postgresql Server" 
      type="Npgsql.NpgsqlFactory, Npgsql, Version=4.0.0.0, Culture=neutral" />
  </DbProviderFactories>
</system.data>
<connectionStrings>
  <add name="MinDatabase" connectionString="Server=localhost;Port=5432;Database=postgres;User Id=postgres;Password=;CommandTimeout=20;" 
    providerName="Npgsql" />
</connectionStrings>

希望它有效

于 2012-12-19T08:29:48.927 回答
2

你从哪里下载 Npgsql?如果您使用的是来自官方版本的 Npgsql,那么您的问题是程序集的 Version 属性。支持 EF 4.x 的 Npgsql 有 2.0.14.3 版,支持 EF 6 的 Npgsql 有 2.1.0 版。没有版本 4.0.0.0。

有关在实体框架中使用 Npgsql 的更多信息,请查看:

如何将 PostgreSql 与 EntityFramework 6.0.2 集成?

带有 Npgsql 的实体框架 6

http://fxjr.blogspot.com.br/2014/02/using-entity-framework-6-with-npgsql-210.html

我希望它有所帮助。

于 2014-02-26T18:01:58.770 回答