Невозможно определить имя поставщика для фабрики поставщика типа «System.Data.SQLite.SQLiteFactory». с пакетом Nuget версии 1.0.94.1

18

Я получаю эту ошибку с пакетом Nuget для SQLite 1.0.94.1. Я занимался различными разделами app.config, чему помогали похожие вопросы о предыдущих версиях этого пакета, но я не могу заставить его работать. Ниже приведен app.config, как я нашел его после установки пакета Nuget. Я удалил app.config перед его установкой. После этого я добавил только строки подключения.

Итак, где проблема?

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <!--Added by me, the rest of the app.config was constructed by installing the SQLite package -->
  <connectionStrings>
    <add name="PrivateMessengerContext"  connectionString="DataSource=|DataDirectory|\PrivateMessengerDb.db" providerName="System.Data.SQLite.EF6"/>
    <add name="PasswordContext" connectionString="DataSource=|DataDirectory|\PasswordDb.db" providerName="System.Data.SQLite.EF6"/>
  </connectionStrings>
  <system.data>
    <!--
        NOTE: The extra "remove" element below is to prevent the design-time
          support components within EF6 from selecting the legacy ADO.NET
          provider for SQLite (i.e. the one without any EF6 support).  It
          appears to only consider the first ADO.NET provider in the list
          within the resulting "app.config" or "web.config" file.
    -->
    <DbProviderFactories>
      <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
      <remove invariant="System.Data.SQLite" />
      <remove invariant="System.Data.SQLite.EF6" />
      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
    </DbProviderFactories>
  </system.data>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
    </providers>
  </entityFramework>
</configuration>
    
задан Dabblernl 12.10.2014 в 19:15
источник
  • Это приложение app.config делает noy правильно. Pls удаляет и только устанавливает пакет sqlite.ef6 - но expdct его шаткий, предложите yiu сообщить о любых проблемах на system.data.sqlite.org –  ErikEJ 12.10.2014 в 21:02
  • @ErikEJ Я удалил пакет и переустановил только пакет EF6. Меньшие зависимости были установлены сейчас, но resuing app.config идентичен, и ошибка остается. Пакет имеет более 4 000 загрузок, поэтому там должны быть волшебники, которые заставили его работать. –  Dabblernl 12.10.2014 в 21:35
  • Когда вы получите сообщение об ошибке? –  ErikEJ 12.10.2014 в 21:54
  • @ErikEJ Сначала я использую код. Таким образом, ошибка появляется в первый раз, когда используется DbContext (PrivateMessengerContext). –  Dabblernl 12.10.2014 в 22:12
  • Получение той же самой проблемы. –  Poul K. Sørensen 18.10.2014 в 22:15
Показать остальные комментарии

2 ответа

21

Добавьте еще одного поставщика

<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />

шаг

<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />

ниже

<remove invariant="System.Data.SQLite" />

и измените имя поставщика на providerName="System.Data.SQLite в строке подключения.

ИЗМЕНИТЬ : См. Также Ссылка

    
ответ дан Mihail 24.12.2014 в 09:10
источник
  • У меня та же проблема, разница в том, что я использую entityframework.6.1.3.nupkg, поэтому, когда я реализую ваши рекомендации, выкиньте это исключение. Поставщик ADO.NET с инвариантным именем «System.Data.SQLite» либо не зарегистрирован в файле конфигурации устройства или приложения или не может быть загружен. –  Cyberguille 11.05.2015 в 20:50
7

Что сработало для меня, так это следить за комментарием на странице 2015 года в формате Билет SQLite :

  

Если вы переключите целевую платформу проекта с 4.5.1 на 4 и переустановите пакет nuget, у вас все будет работать (даже если вы вернете его обратно до 4.5.1).

Возможно, аналогичный эффект на конфигурацию ответа Mihail, не уверен.

    
ответ дан Vimes 28.05.2015 в 21:46
источник
  • Чудом решена моя .. Просто отметить (как сказано в ответе); моя версия платформы была только 4.5. Вернувшись к платформе версии 4, переустановка SQLite, а затем возврат к 4.5, заставил ее работать. –  myuce 10.08.2015 в 22:27
  • После этого у меня возникла другая проблема, потому что Sqllite.CodeFirst потребовал недавнюю EntityFramework. Мне пришлось вручную обновлять EntityFramework с 6.1.0 до 6.1.3 (кликать по номеру версии). Теперь я закончил, на .NET v4.0. –  Jarekczek 12.07.2017 в 09:27