Ответ 1
Вы прочитали раздел 3.4 "Использование Npgsql с ProviderFactory" из точное руководство?
У меня есть проект, который я пытаюсь передать из SQL Server в PostgreSQL. У меня почти все, что я считаю, за исключением того, что я не могу получить DbProviderFactory
для работы с Npgsql.
Factory = DbProviderFactories.GetFactory("Npgsql");
дает
Необработанное исключение: System.Configuration.ConfigurationErrorsException: Не удалось найти или загрузить зарегистрированный .Net Framework Поставщик данных.
Как это исправить?
Вы прочитали раздел 3.4 "Использование Npgsql с ProviderFactory" из точное руководство?
Попробуйте определить factory в вашем 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
Значение атрибута типа важно в записи 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 Framework Framework.
(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-разрядная версия]