DbProviderFactory с Npgsql? - PullRequest
       53

DbProviderFactory с Npgsql?

19 голосов
/ 02 августа 2010

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

Factory = DbProviderFactories.GetFactory("Npgsql");

выходы

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

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

Ответы [ 5 ]

13 голосов
/ 08 ноября 2013

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

10 голосов
/ 02 августа 2010

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

1 голос
/ 28 декабря 2015

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

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

(2), зарегистрировать npgsql.dll и mono.security.dll в GAC с использованием gacutil


Пошаговые инструкции для:

(1) добавление поставщика DbFactory в machine.config

a.перейдите в соответствующую директорию конфигурации NET Framework (например, C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config)

b.отредактируйте файл 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

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

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

1 голос
/ 11 января 2015

Значение атрибута 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
0 голосов
/ 07 ноября 2013

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

...