web-dev-qa-db-fra.com

"Aucun fournisseur Entity Framework trouvé" pour EF 6 et SQLite 1.0.96.0

Je me rends compte qu'il y a déjà plusieurs questions similaires sur ce sujet, mais beaucoup d'entre elles proviennent d'une version plus ancienne de SQLite qui ne supportait pas totalement EF 6 à ma connaissance. J'ai essayé d'innombrables suggestions de ces discussions et je fais quelque chose de mal ou quelque chose a dû changer.

J'utilise VS 2013, ciblant .NET 4.5.1 et ai installé le package sqlite-netFx451-setup-bundle-x86-2013-1.0.96.0.exe à partir de la page de téléchargement system.data.sqlite.org , ainsi que le package System.Data.SQLite EF6 du Gestionnaire NuGet (qui installe EF6).

Ci-dessous, mon fichier App.config actuel (il est quasiment intact, sauf que j'ai essayé d'ajouter les variables de clé Version, Culture et Public au type):

<?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>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
  </startup>
  <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, Version=1.0.96.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    </providers>
  </entityFramework>
  <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, Version=1.0.96.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139"
      />
    </DbProviderFactories>
  </system.data>
</configuration>

Et mon packages.config:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="6.1.2" targetFramework="net451" />
  <package id="System.Data.SQLite.EF6" version="1.0.96.0" targetFramework="net451" />
</packages>

Si je fais quelque chose comme tenter de générer une base de données à partir d'un modèle, l'erreur suivante apparaît:

Aucun fournisseur Entity Framework trouvé pour le fournisseur ADO.NET avec nom invariant 'System.Data.SQLite.EF6'. Assurez-vous que le fournisseur est enregistré dans la section 'entityFramework' ...

J'ai essayé de jouer avec le fichier App.config et d'ajouter d'autres fournisseurs et fournisseurs comme le suggéraient les anciens threads, mais en vain. 

Comment puis-je résoudre ce problème? Toute aide est grandement appréciée!

Edit: J'ai réussi à le faire fonctionner assez bien pour utiliser une première approche de base de données. Voici les parties pertinentes de mon fichier App.config:

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

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

J'utilise EF 6.1.2 et System.Data.SQLite 1.0.96.0.

36
Simon

J'ai résolu la même erreur avec juste ajouter une seule ligne dans App.config

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

PS: Ajouter provider à <configuration>> <entityFramework>> <providers>

76

Voici un app.config de travail

<?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>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>

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

  <connectionStrings>
    <!-- use AppDomain.SetData to set the DataDirectory -->
    <add name="MapDbConnectionStr" connectionString="Data Source=|DataDirectory|MapDb.sqlite" providerName="System.Data.SQLite" />
  </connectionStrings>

  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SQLite.EF6" />
      <add name="SQLite Data Provider" invariant="System.Data.SQLite" description="Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
    </DbProviderFactories>
  </system.data>



</configuration>
10
Paul

J'ai enfin eu trop de travail

J'utilise: EF 6.1.3 http://www.Microsoft.com/en-us/download/details.aspx?id=40762 Et Système .Data.SQLite 1.0.96.0 Sqlite-netFx451-setup-bundle-x86-2013-1.0.96.0.exe

J'ai suivi la description écrite en: La base de données crée d'abord un modèle d'entité 6.1.1 à l'aide de system.data.sqlite 1.0.93 ça aussi)

Pour le fichier app.config, j’utilisais ces correctifs: https://stackoverflow.com/a/24324212/885349 (Écrit par tomexou)

Enfin, SQLite Connector n'apparaissait pas dans le mappeur de modèle de données ADO.Net Entity.

Le lien manquant était le dossier\bin . Je devais définir le paramètre "Copy Local" = true pour les dll suivantes:

  • SQLite.Designer 
  • System.Data.SQLite
  • System.Data.SQLite.EF6
  • System.Data.SQLite.Linq

Seulement pour compléter - ajouté via Nuget et aussi dans le dossier\bin

  • Cadre d'entité 
  • EntityFramework.SqlServer

Et la connexion SQLite a été montrée ...

5
CreateAHero

Après avoir cherché pendant une semaine, je pense que ce problème est une caractéristique du développement de l’équipe sqlite.

Plus d'informations peuvent être trouvées ici La connexion SQLite n'apparaissant pas dans Entity Data Model Wizard

edit: Peut-être que regarder dans différents fournisseurs pourrait en valoir la peine. Bien que je n’aie pas testé cela moi-même, http://www.devart.com/dotconnect/ offre des alternatives prometteuses et indique la compatibilité EF.

3
ImP

Essayez ces réglages:

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

<system.data>
    <DbProviderFactories>
        <remove invariant="System.Data.SQLite.EF6" />
        <add name="SQLite Data Provider" invariant="System.Data.SQLite" description="Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
    </DbProviderFactories>
</system.data>

Voir Entity Framework 6 + SQLite

3
Steve Greene
public class EFConfiguration : DbConfiguration
{
    public EFConfiguration()
    {
        SetDefaultConnectionFactory(new LocalDbConnectionFactory("v.11"));

        //HACK
        var EF6ProviderServicesType = typeof(System.Data.SQLite.EF6.SQLiteProviderFactory).Assembly.DefinedTypes.First(x => x.Name == "SQLiteProviderServices");
        var EF6ProviderServices = (DbProviderServices)Activator.CreateInstance(EF6ProviderServicesType);
        SetProviderServices("System.Data.SQLite.EF6", EF6ProviderServices);
        SetProviderServices("System.Data.SqlClient", System.Data.Entity.SqlServer.SqlProviderServices.Instance);
        SetProviderFactory("System.Data.SQLite.EF6", System.Data.SQLite.EF6.SQLiteProviderFactory.Instance);
        SetProviderFactory("System.Data.SQLite", System.Data.SQLite.SQLiteFactory.Instance);
    }
}
0
user1770543