DbProviderFactory с Npgsql?

У меня есть проект, который я пытаюсь портировать с SQL Server на PostgreSQL. Я почти все сделал, я верю, за исключением, я не могу получить DbProviderFactory работать с Npgsql.

Factory = DbProviderFactories.GetFactory("Npgsql");

доходность

Необработанное исключение: System.Configuration.ConfigurationErrorsException: не удалось найти или загрузить зарегистрированный поставщик данных.Net Framework.

Как это исправить?

5 ответов

Решение

Вы читали раздел 3.4 "Использование Npgsql с ProviderFactory" из прекрасного руководства?

Попробуйте определить фабрику в вашем 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

Значение атрибута 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

Это были шаги, которые решили это для меня:

(1) добавьте поставщика DbFactory в файл machine.config, расположенный в папке.NET Microsoft Frameworking

(2) зарегистрируйте npgsql.dll и mono.security.dll в GAC с помощью gacutil


Пошаговая информация для:

(1) добавить провайдера DbFactory в machine.config

а. перейдите в соответствующую директорию конфигурации NET Framework (например, 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) зарегистрировать npgsql.dll и mono.security.dll в GAC

а. проверьте, находятся ли npgsql и mono.security в папке GAC (моя папка GAC была расположена в C:\Windows\Microsoft.NET\assembly\GAC_MSIL)

Если нет, то используйте gacutil для установки npgsql в GAC в командной строке, используя gacutil /i npgsql.dll

Зарегистрируйте ngsql и mono.security dll в GAC и добавьте провайдера dbfactory в machine.config для обоих [32- и 64-битная версия]

Другие вопросы по тегам