web-dev-qa-db-fra.com

System.Data.SQLite 1.0.91.0 et EF6.0.2

Quelqu'un a-t-il mis la nouvelle version de System.Data.SQLite 1.0.91.0 à fonctionner avec Entity Framework 6 dans Visual Studio 201 #? Si vous l'avez fait, comment l'avez-vous fait? 

Mise à jour - 20 mars 2014: System.Data.SQLite 1.0.92.0 a été publié mais je n'ai pas eu la chance de créer un EDMX dans VS2013 :( J'ai fini par utiliser le gestionnaire de packages (car EF6. #. # Est une dépendance dans le nouveau SQLite Paquet NuGet):

uninstall-package entityframework -force

redémarrez VS2013 et mettez l'ancien EF5 pour que VS2013 génère un EDMX à partir d'une base de données existante:

install-package entityframework -version 5.0.0

Remarque: Il ne s'agissait pas d'un test complexe de base de données relationnelle SQLite multi-tables complexe. Je ne suis donc pas sûr des problèmes qui surviendront si j'utilise quoi que ce soit avec plusieurs relations de navigation (FK): /

REPONSE pour EDMX/Model First: (Mise à jour - 2 mars 2014) J'ai trouvé une solution de contournement, mais elle n'est pas suffisamment cohérente et nécessite trop d'étapes pour la considérer comme une solution valide. Fondamentalement:

  • vous créez tous les fichiers de classe (s), 

  • établir une connexion à une base de données SQLite existante avec des tables, 

  • modifiez le fichier web/app.config comme décrit par mistachkin dans le ticket SQLite Trouble en suspens ( http://system.data.sqlite.org/index.html/tktview?name=7b8fd3ef77 ), notamment en simulant le des morceaux cdsl/.ssdl/.msl, et

  • puis créez manuellement tous les modèles d'entité dans Designer dans un EDMX vide avant de reconstruire le projet, puis ...

  • faites un clic droit sur une entité et choisissez "Mettre à jour à partir de la base de données" ... 

Parfois, EF/VS2013 ajoutera le .tt/DbContesxt et parfois non. Bien trop "frapper ou manquer" :(

REPONSE pour "Code First" avec et sans base de données SQLite existante (basée sur les suggestions de PMCB, Drexter et Jimi). Notez toutefois que vous ne pouvez générer aucun modèle EF ni fichier EDMX [sic - Langage de définition conceptuelle de schéma (.CSDL), Langage de définition de schéma magasin (.SSDL) et Langage de spécification de mappage (.MSL)] dans Visual Studio 2013. J'ai n'essayez pas de créer manuellement les fichiers EDMX pour voir s'ils sont acceptables pour EF et même si je le faisais, il me semble que faire toute la création manuelle/mappage/modifications/modifications XML annule l'objectif global/concept d'un framework basé sur une entité ...

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

Voici la classe de test (notez que je devais changer le DogID en Int64 pour le faire fonctionner avec SQLite ...):

using System.Data.Entity;

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

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

et voici le test DbContext:

using System.Data.Entity;

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

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

============= Détails originaux de la question ===================

SQLite 1.0.91.0 a été publié hier ( http://system.data.sqlite.org/index.html/doc/trunk/www/news.wiki ) avec "Ajouter un support pour Entity Framework 6". Le fichier "Lisez-moi" contient une mise en garde vous demandant d'ajouter ce qui suit à 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>

Si vous utilisez NuGet dans VS2013 pour ajouter "System.Data.SQLite (x86/x64)", cette ligne est désormais ajoutée à web.config/app.config:

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

En guise de test, j’ai fait une copie d’une application NET4.5.1/MVC4/EF5/System.Data.SQlite 1.0.90 opérationnelle et j’ai exécuté PM: update-package. Il a ajouté avec succès la ligne ci-dessus à mon web.config et j'ai ajouté les éléments "DbProviderFactories" requis. Reconstruisez et exécutez ... Échec avec 'aucun fournisseur trouvé'. Je l'essaie sans "DbProviderFactories" ... Échec avec "aucun fournisseur trouvé". Je supprime la nouvelle pièce "fournisseur" ... Échec avec "Aucun fournisseur trouvé". J'essaye donc un nouveau projet mais avec et sans identité (OWIN) au cas où le problème se poserait. Ni l'un ni l'autre travail… Assez à court d'idées, demandez ici après les recherches Google/StackOverflow.

============ 14 février 2014 ===============

Malheureusement, les entrées modifiées et de nombreuses variantes ne fonctionnaient pas sur mon PC ... J'utilise VS 2013 Pro sur Win8.1 Pro x64 . J'ai réinstallé System.Data.SQLite . Au moins, je suis obtenir une nouvelle erreur avec la base de données SQLite existante et la nouvelle créée par VS2013 (à laquelle je peux accéder et voir qu'elle a une structure appropriée avec zéro table):

"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 et System.Data.SQLite (x86/x64) ont été intégrés via NuGet dans de toutes nouvelles applications Web MVC et une application de console Windows. Les deux ont provoqué l'erreur ci-dessus ... Je commence à croire que quelque chose ne va pas avec mon VS3013 mais je ne veux pas passer 6 heures de plus à le télécharger et à le corriger pour pouvoir travailler avec MVC4/SQLite/EF5 ...

===== 17 février 2014 ========

@ Jimi - Pas de chance ici. J'ai essayé avec NET 4.5 et 4.5.1 avec un nouveau projet d'application MVC et Windows. J'ai essayé avec EF6.0.0 et EF6.0.2. J'ai essayé de remplacer les références 3x SQLite.Data.xxx.dll par des copies locales de l'installation de System.Data.SQLite après avoir ajouté "System.Data.SQLite (x86/x64)" de NuGet. J'ai également essayé le package NuGet «System.Data.SQLite.MSIL» au lieu d'ajouter DBFactories aux différentes versions de Web.Config et App.Config que j'ai essayées.J'ai également essayé de créer une application Web NET 4.0 MVC4, mais il semble que "System.Data.SQLite (x86/x64)" de NuGet inclut désormais une condition requise pour EF6. Etant optimiste, j’ai suivi et essayé les différentes méthodes ‘enregistrer/créer une nouvelle connexion/modifier web.config/etc’, mais cela ne fonctionnerait pas. J'ai abandonné pour l'instant et je suis retourné à SQLite avec Datasets pour pouvoir utiliser Linq avec System.Data.DataSetExtensions en rendant DataTables "AsEnumerable" (ou Java (jdbc) pour les personnes qui souhaitent une copie hors connexion de la base de données sur leur Android OS avec une interface minimale).

========= 19 février 2014 =======.

@ Christian Sauer - Je n'ai pas réussi à faire fonctionner EF6 et System.Data.SQLite (ou System.Data.SQLite.EF6), mais ...

Je viens de trouver une mise à jour sur http://system.data.sqlite.org/index.html/tktview?name=7b8fd3ef77 qui indique qu'il existe un package SQLite NuGet plus récent:

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.

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

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

after I tried mistachkin's suggestion to add the dll's to the GAC (done with .NET "gacutil.exe")...

42
PWRR2207

J'ai travaillé dessus pendant plusieurs heures aujourd'hui avant de le comprendre. Le package NuGet ajoute l'entrée appropriée "System.Data.SQLite.EF6" dans les fabriques du fournisseur EntityFramework, mais vous devez supprimer ou commenter l'ancienne entrée "System.Data.SQLite". Le générateur de contexte EF explose si l'une des entrées de fournisseur n'est pas valide et que l'ancien fournisseur 1.0.91 SQLite n'est pas pris en charge dans EF6.

EDIT: Le nettoyage de la configuration a permis à mes autres objets de contexte (SQL Server) d’être instanciés, mais il n’est toujours pas possible d’instancier correctement les objets de contexte SQLite. L'exception interne est 

Impossible de trouver le fournisseur de données .Net Framework demandé. Il se peut que non être installé.

EDIT 2/SOLUTION Enfin trouvé le résultat! Je pense qu'il y a un problème dans System.Data.SQLite qui force une référence au nom du fournisseur System.Data.SQLite plutôt qu'à la valeur fournie dans la chaîne de connexion. J'ai pu contourner ce problème en créant deux entrées dans la section fournisseur EntityFramework, l'une nommée "System.Data.SQlite" et l'autre "System.Data.SQLite.EF6", mais les deux fournisseurs utilisent en réalité le fournisseur 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>

23
pmcb

Voici tout mon fichier de configuration. J'utilise EF 6.0.2 avec SQLite 1.0.91. Je n'ai pas encore essayé le générateur de modèle, mais mes objets de contexte fonctionnent correctement et j'ai testé l'insertion/la mise à jour/la suppression via le contexte ainsi que les commandes SQL directes via le contexte dbcontext. L'astuce se trouve dans la section entityFramework/providers. J'ai dû dupliquer les entrées de fournisseur SQLite pour le fournisseur EF6, mais utiliser les anciens et nouveaux noms invariants.

    <?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>
10
pmcb

Après 6 heures d’essais/tentatives d’erreur, la tête qui cogne contre le mur et d’autres tâches que les développeurs réalisent pour comprendre le fonctionnement des choses, je crois que j’ai réussi à ce que cela fonctionne sur VS 2013.

Suivez ces étapes.

  1. Installez System.Data.SQLite si vous ne l'avez pas déjà fait.
  2. Récupérez System.Data.SQLite dans votre projet depuis NuGet (remarquez qu'il ajoute des éléments dans le fichier app.config).
  3. C'est la partie importante. Enregistrez votre solution et exit VS 2013.
  4. Rechargez la solution et vous pouvez maintenant ajouter un modèle de données d'entité ADO.NET à votre projet.

Chaque fois que vous souhaitez ajouter un modèle, vous devez quitter VS 2013 et doit créer le modèle à l'aide de "Nouvelle connexion ...".

Pourquoi ça marche comme ça, tu dis? L'univers fonctionne de manière mystérieuse, dis-je.

Edit: Plus tard, j'ai découvert que pour ouvrir une connexion au modèle, vous devez changer le fournisseur dans la configuration de <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /> en <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /> et DbProviderFactories doit être dans une balise system.data in not déjà.

6
Jimi

Je veux juste partager avec toute mon expérience avec le même problème

J'ai essayé d'utiliser System.Data.SQLite 1.0.94 et EF6 et j'ai quelques problèmes avec la connexion à la base de données. Je travaille dans VS 2013.4. Après avoir installé tous les paquets nécessaires et vérifié Web.config comme suggéré par pmbc, je rencontrais toujours le même problème de connexion et d’exception du type System.Data.Entity.Core.ProviderIncompatibleException.

Après quelques recherches supplémentaires sur Internet, j'ai trouvé cet add-on pour VS2013 fonctionner avec les bases de données SQL Compact et SQLite, ce qui m'a vraiment aidé: https://visualstudiogallery.msdn.Microsoft.com/0e313dfd-be80-4afb-b5e9- 6e74d369f7a1

Maintenant, je peux utiliser la base de données SQLite/create exsiting de VS/create EF model en utilisant la base de données existante et tout le reste

J'espère que cela t'aides

METTRE &AGRAVE; JOUR

Juste quelques informations supplémentaires pour l'aide. Voici ma section de fichier .config résultante 

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

Vérifiez également le numéro de version de la bibliothèque System.Data.SQLite.dll que vous avez installée localement (par defaulr, il est installé dans GAC). Votre version GAC et la version du package de votre projet actuel doivent être identiques. Sinon, vous rencontrerez une exception lorsque vous démarrez votre application.

5
Andrew

Cela a fonctionné pour moi sur VS 2010 en utilisant une application console et en commençant par le code. En tout cas voici mon app.config, qui est basé sur le tutoriel EF6 SQLite de Brice ( 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>
4
Drexter

Enfin, cette solution fonctionne pour moi . Dot Net Framework = 4.5.1 Entity framework = 6.1.1

Téléchargez ceci: 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>
3
Umar Abbas

Je viens de définir Copy local = True pour la bibliothèque System.Data.SQLite.EF6 (dans Références -> System.Data.SQLite.EF6 -> Property) et cela fonctionne

3
Richard S. Popov

J'ai vécu le même type d'erreur, mais pour une raison qui semble ne pas avoir été couverte par les autres réponses . Je voudrais donc partager mon propre cas.

Dans l’Assemblée qui contient EDMX, tout allait bien. Dans Client (en cours d'exécution) Assembly, j'avais toujours la même erreur au moment de l'exécution (le type de fournisseur Entity Framework 'System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6' enregistré dans le fichier de configuration de l'application le fournisseur ADO.NET avec le nom invariant 'System.Data.SQLite.EF6' n'a pas pu être chargé.) 

J'ai remarqué que pour EDMX Assembly, "Copier en local" était défini sur true, mais pas lors de l'exécution de Assembly. Je l'ai réparé et c'était ok. Donc, si vous rencontrez ce problème aussi et que vous n'avez pas de fournisseur SQLite dans GAC, vérifiez vos références si vous avez activé "Copier en local" pour les DLL SQLite. 

Il m’a fallu beaucoup de temps pour trouver des fournisseurs et d’autres services, alors j’espère que cela sera utile pour d’autres!

2
AFract

Après des heures passées à creuser sur Internet, je présente ici une solution efficace

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

projet

2
user1075940

Ça marche pour moi :

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

Avec le dernier paquet de nuget (1.0.94.1): https://www.nuget.org/packages/System.Data.SQLite/ Et outils SQLite: Configurations pour Windows 32 bits 4.5.1) à http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

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

cela a fonctionné pour moi car il y a quelques erreurs internes alors que ça marche fait probablement la différence entre comment EF aime avoir 2 autres tables pour le code d'abord __MigrationHistory & EdmMetadata. Je dirais que c'est trivial pour le moment, mais si vous voulez vraiment profiter de CodeFirst, ces tables doivent être créées manuellement, je suppose pour le moment.

Edit - Seule entrée dans la liste des fournisseurs et j'ai supprimé toutes les références à SqlServer ...

Vs2013 Ultimate lastest SQLite Nuget.

1
mvermef

Voici la solution qui a fonctionné pour moi.

Installez le package System.Data.SQLite et assurez-vous que la section des usines de base de données est comme ci-dessous.

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

En installant la dernière version de SQLite à partir du gestionnaire de packages Nuget, j'avais une erreur lors de l'installation de packages SQLite (alors que je travaillais sur un projet nécessitant edmx sur sqlite DB).

Étape 1: Lisez le message attentivement. Cela peut révéler ce que le message d'erreur tente de transmettre.

Par exemple:

An error occurred while connecting to the database. The database might be unavailable. An exception of type 'System.InvalidCastException' occurred. 

The error message is: '[A]System.Data.SQLite.SQLiteConnection cannot be cast to [B]System.Data.SQLite.SQLiteConnection. 

Type A originates from 'System.Data.SQLite, Version=1.0.105.1, Culture=neutral, PublicKeyToken=db937bc2d44ff139' in the context 'Default' 
at location 'C:\WINDOWS\Microsoft.Net\Assembly\GAC_32\System.Data.SQLite\v4.0_1.0.105.1__db937bc2d44ff139\System.Data.SQLite.dll'. 

Type B originates from 'System.Data.SQLite, Version=1.0.106.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139' in the context 'LoadNeither' 
at location 'C:\Users\Ganesh Kamath\AppData\Local\Microsoft\VisualStudio\14.0\ProjectAssemblies\og1mcjvn01\System.Data.SQLite.dll'.'.

Après avoir lu ceci, je me suis rendu compte que j'avais choisi la version 1.0.106.0 pour la mise à niveau.

Le message indique essentiellement que il connaît la version 1.0.105.1 mais pas la version 1.0.106.0.

Étape 2: Supprimez la version à l'origine du problème en sélectionnant manuellement l'occurrence dans l'option Nuget Package for Solution de Visual Studio.

Outils> Gestionnaire de paquets Nuget> Gérer les paquets Nuget pour la solution ...

 enter image description here

Étape 3: Utilisez la ligne de commande Nuget pour installer la version de SQLite comprise par le système. 

Dans l'exemple ci-dessus, la version est 1.0.105.1

Outils> Gestionnaire de paquets Nuget> Console du gestionnaire de paquets

 enter image description here

Les commandes nécessaires ressembleront à ceci:

Install-Package System.Data.SQLite -Version 1.0.105.1 
Install-Package System.Data.SQLite.Core -Version 1.0.105.1 
Install-Package System.Data.SQLite.EF6 -Version 1.0.105.1

J'ai eu un problème de permission lors de l'installation du paquet, alors j'ai eu cette erreur ... J'ai résolu d'exécuter vs2013 en tant qu'administrateur.

alors:

  1. désinstaller le paquet
  2. fermer vs2013
  3. lancez-le à nouveau en tant qu'administrateur (important)
  4. réinstaller le paquet de nuget

à la fin, j'annonce également ceci dans les fournisseurs (comme suggéré par les autres utilisateurs):

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