Подтвердить что ты не робот

System.Data.SQLite 1.0.91.0 и EF6.0.2

Кто-нибудь получил новый System.Data.SQLite 1.0.91.0 для работы с Entity Framework 6 в Visual Studio 201 #? Если да, как вы это сделали?

Обновление - 20 марта 2014 года: выпущен System.Data.SQLite 1.0.92.0, но мне не удавалось создать EDMX в VS2013:( Я закончил использование диспетчера пакетов (потому что EF6. #. # является зависимостью в новый пакет SQLite NuGet):

uninstall-package entityframework -force

перезапустите VS2013 и включите старый EF5, чтобы получить VS2013 для генерации EDMX из существующей базы данных:

install-package entityframework -version 5.0.0

Примечание. Это был не сложный, многозадачный SQLite реляционный тест базы данных, поэтому я не уверен, что возникнут другие проблемы, если я что-то использую с более чем двумя отношениями навигации (FK):/

ANSWER для EDMX/Model First: (Обновление - 2 марта 2014 года). Я нашел обход, но он недостаточно согласован и требует слишком много шагов, чтобы считать его действительным решением. В основном:

  • вы делаете все файлы класса,

  • установить соединение с существующей базой данных SQLite с таблицами,

  • измените файл web/app.config так, как описано mistachkin в по-прежнему выдающемся SQLite Trouble Ticket (http://system.data.sqlite.org/index.html/tktview?name=7b8fd3ef77), включая фальсификацию cdsl/.ssdl/.msl, и

  • затем вручную создайте все Модели сущностей в Дизайнере в Пустое EDMX перед восстановлением проекта, а затем...

  • щелкните правой кнопкой мыши по объекту и выберите "Обновить из базы данных"...

Иногда EF/VS2013 добавляет .tt/DbContesxt, а иногда нет. Путь слишком "ударил или пропустил": (

ANSWER для "Code First" с и без существующей базы данных SQLite (на основе предложений PMCB, Drexter и Jimi). Обратите внимание, однако, что вы не можете автоматически генерировать любые EF-модели или файлы EDMX [sic - язык определения концептуальной схемы (.CSDL), язык определения схемы печати (.SSDL) и язык спецификации сопоставления (.MSL)] в Visual Studio 2013. Я сделал не пытайтесь вручную создать файлы EDMX, чтобы убедиться, что они будут приемлемы для EF, и даже если бы я это сделал, мне кажется, что выполнение всех ручных создания/сопоставления/изменений/редактирования XML поражает всю цель/концепцию структуры на основе сущности...

<connectionStrings>
    <add name="DogsContext" connectionString="Data Source=|DataDirectory|\dogs.s3db;" providerName="System.Data.SQLite" />
</connectionStrings>
<entityFramework>
    <providers>
       <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    </providers>
</entityFramework>
<system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SQLite" />
      <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
      <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, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    </DbProviderFactories>
</system.data>

Вот тестовый класс (обратите внимание, что мне пришлось сменить DogID на Int64, чтобы он работал с SQLite...):

using System.Data.Entity;

namespace WebApplication1.Models
{
    public class Dog
    {
        public Dog() { }

        public Int64 DogID { get; set; }
        public string DogName { get; set; }
    }
}

и вот тест DbContext:

using System.Data.Entity;

namespace WebApplication1.Models
{
    public class DogsContext : DbContext
    {
        public DogsContext() : base() { }

        public DbSet<Dog> DogNames { get; set; }
    }
}

============= Оригинальная информация о вопросе ==================

Вчера был выпущен SQLite 1.0.91.0 (http://system.data.sqlite.org/index.html/doc/trunk/www/news.wiki) с надписью "Добавить поддержку для Entity Framework 6". В включенном "Readme" есть оговорка, в которой вы добавили следующее к web.config/app.config:

<configuration>
<system.data>
    <DbProviderFactories>
        <remove invariant="System.Data.SQLite" />
        <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite"
             type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    </DbProviderFactories>
</system.data>
</configuration>

Если вы используете NuGet в VS2013 для добавления "System.Data.SQLite(x86/x64)" , теперь вы добавляете эту строку в файл web.config/app.config:

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

В качестве теста я сделал копию рабочего приложения NET4.5.1/MVC4/EF5/System.Data.SQlite 1.0.90 и запустил пакет обновления PM: update. Он успешно добавил вышеприведенную строку в мой web.config, и я добавил необходимые фрагменты "DbProviderFactories". Перестроить и запустить... Не удалось найти "ни один поставщик". Я пробовал это без "DbProviderFactories"... Сбой с "отсутствием провайдера". Я удаляю новую часть "поставщика"... Сбой с "отсутствующим провайдером". Поэтому я пробую новый проект, но с Identity (OWIN) и без него, если это проблема. Ни одна из них не работает... В значительной степени заканчиваются идеи, поэтому просим здесь после поиска Google/StackOverflow.

============ 14 февраля 2014 года ===============

К сожалению, измененные записи и многочисленные варианты не работали на моем ПК... Я использую VS 2013 Pro на Win8.1 Pro x64. Я переустановил System.Data.SQLite. По крайней мере, я получаю новую ошибку как с существующей базой данных SQLite, так и с новой, созданной VS2013 (к которой я могу получить доступ и видеть, что она имеет правильную структуру с нулевыми таблицами):

"An error occurred connecting to the database. The database might be unavailable. An 
exception of type 'System.Data.Entity.Core.ProviderIncompatibleException' occurred. The 
error message is: Schema specified is not valid. Errors: StoreSchemaDefinition(2,64) : 
Error 0175: The ADO.NET provider with invariant name 'System.Data.SQLite.EF6' is either 
not registered in the machine or application config file, or could not be loaded. See the 
inner exception for details.'"

Как EF6, так и System.Data.SQLite(x86/x64), куда вытащили через NuGet в новые веб-приложения MVC и приложение Windows Console. Оба вызвали ошибку выше... Я начинаю подозревать, что, возможно, что-то не так с моим VS3013, но я не хочу тратить еще 6 часов на загрузку и исправление, когда я могу работать с MVC4/SQLite/EF5...

===== 17 февраля 2014 года ========

@Jimi - Не повезло. Я попытался с NET 4.5 и 4.5.1 с новым MVC и Windows Application Project. Я пробовал с EF6.0.0 и EF6.0.2. Я попытался заменить 3x SQLite.Data.xxx.dll ссылки локальными копиями из установки System.Data.SQLite после добавления "System.Data.SQLite(x86/x64)" из NuGet. Я также попробовал пакет NuGet "System.Data.SQLite.MSIL" вместо добавления DBFactories к различным версиям Web.Config и App.Config, которые я пробовал.

Я также попытался создать веб-приложение NET 4.0 MVC4, но, похоже, NuGets "System.Data.SQLite(x86/x64)" теперь включает требование для EF6. Будучи обнадеживающим, я согласился с этим и попробовал различные "сохранить/создать новое соединение/изменить web.config/etc, но это не сработает. Я отказался от этого и вернулся к SQLite с наборами данных, поэтому я могу использовать Linq с System.Data.DataSetExtensions, создав DataTables" AsEnumerable" (или Java (jdbc) для людей, которым нужна автономная копия базы данных на их Android OS с минимальным интерфейсом приложения).

========= 19 февраля 2014 года =======

@Christian Sauer - я не получал EF6 и System.Data.SQLite(или System.Data.SQLite.EF6) для совместной работы, но... но

Я только что нашел обновление http://system.data.sqlite.org/index.html/tktview?name=7b8fd3ef77, в котором говорится, что есть новый пакет SQLite NuGet:

mistachkin added on 2014-02-19 03:39:35:

All NuGet packages have been updated to 1.0.91.3.  Several fixes are included
that pertain to supporting Entity Framework 6.

Я тестирую его сейчас с помощью нового проекта (MVC Web Project в VS2013 с использованием EF6.0.2 и SQLite 1.0.91.3, который предназначен для .NET 4.5.1)...

Не повезло с новым SQLite 1.0.91.3. Файл web.config изменился на:

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SQLite" />
      <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.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>

Я собираюсь попробовать испортить конфигурацию после работы (как было предложено Jimi и PCMB) и опубликовать любые выводы.

Я просто попытался переустановить как 32, так и 64-разрядные версии System.Data.SQLite(с добавлением и без добавления в GAC), но EF6 не будет работать с SQLite. Если я попытаюсь вручную построить модель и сопоставления, она не срабатывает в любое время, когда я ссылаюсь/пытаюсь использовать EF6. Что касается создания моделей данных Entity (будь то из существующей базы данных SQLite или новой базы данных SQLite), это приведет к сбою/ошибке, независимо от того, что я делаю для конфигураций, соединений или поставщиков.

=========== 22 февраля 2014 года =============

Они вытащили/откатили обновление System.Data.SQLite 1.0.91.3 до 1.0.91.0. Существует еще выдающийся билет (http://system.data.sqlite.org/index.html/tktview?name=7b8fd3ef77), который включает некоторые предложения mistachkin. Вот пример использования app.config mistachkin (этот конфиг не работал у меня ни до, ни...):

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </configSections>
  <system.data>
    <DbProviderFactories>
     <remove invariant="System.Data.SQLite" />
     <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
     <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, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    </DbProviderFactories>
  </system.data>
  <connectionStrings>
    <add name="northwindEFEntities" connectionString="metadata=res://*/NorthwindModel.EF6.2013.csdl|res://*/NorthwindModel.EF6.2013.ssdl|res://*/NorthwindModel.EF6.2013.msl;provider=System.Data.SQLite.EF6;provider connection string=&quot;data source=.\northwindEF.db&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <entityFramework>
    <providers>
     <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    </providers>
  </entityFramework>
</configuration>

после того, как я попробовал предложение mistachkin добавить DLL в GAC (сделано с .NET "gacutil.exe" )...

4b9b3361

Ответ 1

Я работал над этим несколько часов сегодня, прежде чем разобраться. Пакет NuGet добавляет соответствующую запись "System.Data.SQLite.EF6" в фабрики поставщиков EntityFramework, но вам нужно удалить или прокомментировать старую запись "System.Data.SQLite". Конструктор контекста EF взрывается, если какая-либо из записей поставщика недействительна, а старый поставщик SQLite 1.0.91 не поддерживается в EF6.

РЕДАКТИРОВАТЬ: очистка конфига позволила другим объектам контекста (SQL Server) создать экземпляр, но он все равно не будет инстанцировать объекты контекста SQLite правильно. Внутреннее исключение составляет

Не удалось найти запрошенный поставщик данных .Net Framework. Это может не быть установленным.

EDIT 2/SOLUTION Наконец понял это! Я думаю, что существует проблема в System.Data.SQLite, которая заставляет ссылаться на имя поставщика System.Data.SQLite, а не на значение, указанное в строке подключения. Я смог обойти это, создав две записи в разделе поставщика EntityFramework, один под названием "System.Data.SQlite" и один под названием "System.Data.SQLite.EF6", но оба провайдера фактически используют поставщика EF6.

<entityFramework>
...
<providers>
    <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</providers>

Ответ 2

Вот мой весь файл конфигурации. Я запускаю EF 6.0.2 с помощью SQLite 1.0.91. Я еще не пробовал генератор модели, но мои объекты контекста работают нормально, и я тестировал вставку/обновление/удаление через контекст, а также прямые команды SQL через dbcontext. Трюк находится в разделе entityFramework/providers. Мне пришлось дублировать записи поставщика SQLite для поставщика EF6, но использовать старые и новые имена инвариантов.

    <?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" />
    <section name="electra.common.configuration.electraConfiguration" type="Electra.Common.Configuration.ElectraConfiguration, Electra.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" restartOnExternalChanges="true" />
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
  </startup>
  <connectionStrings>
    <add name="DBContext_Server" 
        connectionString="server=sunset\sql2012;Integrated Security=SSPI;database=Electra;Pooling=true;max pool size=1000;min pool size=5;Connection Lifetime=30;connection timeout=15" 
        providerName="System.Data.SqlClient" />
    <add name="DBContext_ElectraPOS" 
        connectionString="Data Source=D:\Electra\ElectraWeb\PosEngine.Repository\ElectraPOS.db" 
        providerName="System.Data.SQLite.EF6" />
  </connectionStrings>
    <system.data>
        <DbProviderFactories>
            <remove invariant="System.Data.SQLite" />
            <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
            <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, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
        </DbProviderFactories>
    </system.data>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <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, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
        <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    </providers>
  </entityFramework>
  <electra.common.configuration.electraConfiguration>
    <logging>
      <levels info="true" warning="true" error="true" debug="true" />
    </logging>
  </electra.common.configuration.electraConfiguration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.2.0" newVersion="2.0.2.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Ответ 3

После 6 часов попыток проб/ошибок, голова, стучащая по стене и другие вещи, которые мы разрабатываем, выясняют, как все работает, я считаю, что мне удалось заставить ее работать на VS 2013.

Выполните следующие действия.

  • Установите System.Data.SQLite, если вы этого еще не сделали.
  • Извлеките System.Data.SQLite в ваш проект из NuGet (обратите внимание, что он добавляет некоторые вещи в app.config).
  • Это важная часть. Сохраните решение и выйти VS 2013.
  • Перезагрузите решение, и теперь вы можете добавить ADO.NET Entity Data Model в свой проект.

Каждый раз, когда вы хотите добавить модель, вам придется выйти из VS 2013 и создать модель с помощью "Новое соединение..."

Почему это работает так, вы говорите? Я говорю, что Вселенная работает загадочно.

Изменить: Работая дальше, я обнаружил, что для того, чтобы открыть соединение с моделью, вам нужно изменить поставщика в конфигурации от <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /> до <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /> и DbProviderFactories быть внутри тега system.data, в котором уже нет.

Ответ 4

Он работал у меня на VS 2010, используя консольное приложение и сначала делал код. В любом случае, вот мой app.config, основанный на учебнике Brite EF6 SQLite (http://www.bricelam.net/2012/10/entity-framework-on-sqlite.html):

<?xml version="1.0"?>
 <configuration>
 <configSections>
    <!-- For more information on Entity Framework configuration, visit     http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
 </configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="v11.0"/>
  </parameters>
</defaultConnectionFactory>
<providers>
  <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
  <remove invariant="System.Data.SQLite" />
  <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</DbProviderFactories>
</system.data>
<connectionStrings>
 <add name="ChinookContext" connectionString="Data Source=|DataDirectory|Chinook_Sqlite_AutoIncrementPKs.sqlite" providerName="System.Data.SQLite"/>
</connectionStrings>
</configuration>

Ответ 5

Просто хочу поделиться всем своим опытом с той же проблемой

Я пытался использовать System.Data.SQLite 1.0.94 и EF6 и иметь некоторые проблемы с подключением к базе данных. Я работаю в VS 2013.4. После установки всех необходимых пакетов и cheking web.config, поскольку pmbc предположил, что у меня все еще была та же проблема с соединением и исключением типа System.Data.Entity.Core.ProviderIncompatibleException.

После некоторого дополнительного поиска в Интернете я нашел это дополнение для VS2013 для работы с SQL Compact и SQLite Databases, которые действительно меня выбрали: https://visualstudiogallery.msdn.microsoft.com/0e313dfd-be80-4afb-b5e9-6e74d369f7a1

Теперь я могу использовать exsiting SQLite db/create new из VS/create EF-модели с использованием существующего db и всего остального.

Надеюсь, что это поможет

UPDATE

Еще одна информация для справки. Вот моя итоговая секция файла .config

<entityFramework>
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  <providers>
    <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.95.0, Culture=neutral" />
    <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.95.0, Culture=neutral" />
  </providers>
</entityFramework>
<system.data>
  <DbProviderFactories>
    <remove invariant="System.Data.SQLite" />
    <remove invariant="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" />
    <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>

Также проверьте номер версии библиотеки System.Data.SQLite.dll, которую вы установили локально (через defaulr, он установлен в GAC). Версия GAC и версия пакета в вашем текущем проекте должны быть одинаковыми. В противном случае вы поймаете исключение при запуске приложения

Ответ 6

Наконец, это решение. Работайте со мной. DotNet Framewok = 4.5.1 Структура объекта = 6.1.1

Скачайте это: sqlite-netFx451-setup-bundle-x86-2013-1.0.94.0.exe

<?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" />
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
  </startup>

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <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>

  <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>
      <remove invariant="System.Data.SQLite" />
      <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.94.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />

      <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>
  <connectionStrings>
    <add name="VelocityDBEntities" connectionString="metadata=res://*/AppData.Model1.csdl|res://*/AppData.Model1.ssdl|res://*/AppData.Model1.msl;provider=System.Data.SQLite.EF6;provider connection string=&quot;data source=F:\VelocityPOS\VelocityDB.sqlite&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

Ответ 7

Я просто установил Copy local = True для библиотеки System.Data.SQLite.EF6 (в списке ссылок → System.Data.SQLite.EF6 → Property) и работает

Ответ 8

После нескольких часов, потраченных на рытье через интернет, я представляю рабочее решение

<?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>
  <entityFramework>
    <providers>
      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="NorthwindContext" connectionString="Data Source=Northwind.sl3" providerName="System.Data.SQLite.EF6" />
  </connectionStrings>
  <system.data>
    <DbProviderFactories>
      <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>
</configuration>

проект

Ответ 9

Я испытал такую ​​же ошибку, но по той причине, которая, как представляется, не была покрыта другими ответами. Поэтому я хотел бы поделиться своим собственным делом.

В сборке, содержащей EDMX, все было в порядке. В сборке клиента (выполнения) у меня всегда была такая же ошибка во время выполнения (тип поставщика Entity Framework "System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6", зарегистрированный в файле конфигурации приложения для ADO. NET-провайдер с инвариантным именем "System.Data.SQLite.EF6" не может быть загружен.)

Я заметил, что для сборки EDMX "Копировать локаль" было установлено в true, но не при выполнении сборки. Я исправил его, и все было в порядке. Поэтому, если у вас возникла и эта проблема, и у вас нет поставщика SQLite в GAC, проверьте свои ссылки, если вы включили "скопировать локальную" для SQLite DLL

Я потерял много времени, прежде чем рассчитывать на проверку провайдера и множество других вещей, поэтому я надеюсь, что это будет полезно для некоторых других!

Ответ 10

<providers>
  <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</providers>

это сработало для меня, есть некоторые внутренние ошибки, в то время как они работают, вероятно, делают различия между тем, как EF любит иметь две другие таблицы для кода сначала __MigrationHistory и EdmMetadata. Я бы назвал это тривиальным до сих пор, но если вы действительно хотите использовать CodeFirst, эти таблицы должны быть созданы вручную, я предполагаю это сейчас.

Правка - только запись в списке поставщиков, и я удалил все ссылки на SqlServer...

Vs2013 Окончательный последний SQLite Nuget.

Ответ 11

У меня возникла проблема с разрешением во время установки пакета, поэтому я получил эту ошибку. Я решил запустить vs2013 в качестве администратора.

так:

  • unistall пакет
  • закрыть vs2013
  • запустите его снова как администратор (важно)
  • снова установите nugetpackage

в конце я также объявляю это в провайдерах (как это было предложено другими пользователями):

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

Ответ 12

Вот решение, которое сработало для меня.

Установите пакет System.Data.SQLite и убедитесь, что раздел фабрики db похож на ниже.

<DbProviderFactories>
  <remove invariant="System.Data.SQLite" />
  <remove invariant="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" />
  <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>

Ответ 13

Это работает для меня:

<entityFramework>
    <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>
<system.data>
    <DbProviderFactories>
        <remove invariant="System.Data.SQLite" />
        <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
        <!--<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>

С последним пакетом nuget (1.0.94.1): https://www.nuget.org/packages/System.Data.SQLite/ И инструменты SQLite: установки для 32-разрядной Windows (.NET Framework 4.5.1) на http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki