2014-11-17 1 views
0

Я пытаюсь использовать Sqlite с моим C# Console App, но при попытке добавить Entity-Framwork data model я получаю следующее сообщение:Использование Entity Framework-с Sqlite

Ваш проект ссылается на последнюю версию Entity Framework; однако поставщик базы данных Entity Framework, совместимый с этой версией, не найден для вашего подключения к данным. Если вы уже установили совместимый поставщик, убедитесь, что вы выполнили перестройку своего проекта перед выполнением этого действия. В противном случае выйдите из мастера, установите совместимый провайдер и перестройте проект перед выполнением этого действия.

Шаги для воспроизведения:

  • Добавить новый .NET 4Console Application
  • Установите System.DataBase.SQLite (x86/x64) Nuget package (которая автоматически устанавливает Entity-Framwork пакет как зависимость)
  • Добавить ADO.NET Entity Data Model с добавления нового элемента диалога

после выполнив описанные выше действия следующих app.config были созданы:

<?xml version="1.0" encoding="utf-8"?> 
<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> 
    <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.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> 
</configuration> 

и следующий packages.config:

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="EntityFramework" version="6.1.1" targetFramework="net40" /> 
    <package id="System.Data.SQLite" version="1.0.94.1" targetFramework="net40" /> 
    <package id="System.Data.SQLite.Core" version="1.0.94.0" targetFramework="net40" /> 
    <package id="System.Data.SQLite.EF6" version="1.0.94.0" targetFramework="net40" /> 
    <package id="System.Data.SQLite.Linq" version="1.0.94.1" targetFramework="net40" /> 
</packages> 
+0

То, что вы сделали только позволяет код первого развития. Вам также нужно установить инструменты SQLIte VS, загрузить с сайта system.data.sqlite.org – ErikEJ

+0

Я ищу подходящую загрузку, но не смог ее найти. не могли бы вы указать на правильное направление ('VS 2013',' .NET 4.0')? – Yoav

+0

Имя загрузки - sqlite-netFx451-setup-bundle-x86-2013-1.0.94.0.exe на http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki – ErikEJ

ответ

0

Вам нужны только эти пакеты:

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="EntityFramework" version="6.1.1" targetFramework="net40" /> 
    <package id="System.Data.SQLite.Core" version="1.0.94.0" targetFramework="net40" /> 
    <package id="System.Data.SQLite.EF6" version="1.0.94.0" targetFramework="net40" /> 
</packages> 

А затем установить вам построить конфигурацию x86 !

+0

I см. эти пакеты для 'net45'. они также хороши для проекта «net40»? – Yoav

+0

Обновлен мой ответ сейчас – ErikEJ

0

<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
    <providers> 
    <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.94.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> 
    <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> 
<connectionStrings> 
    <add name="SettingContext" connectionString="Data Source=setting.db" providerName="System.Data.SQLite" /> 

<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>