webentwicklung-frage-antwort-db.com.de

'Kein Entity Framework-Anbieter gefunden' für EF 6 und SQLite 1.0.96.0

Ich weiß, dass es bereits mehrere ähnliche Fragen zu diesem Thema gibt, aber viele von ihnen stammen aus einer älteren Version von SQLite, die EF 6 meines Wissens nicht vollständig unterstützte. Ich habe unzählige Vorschläge aus diesen Threads ausprobiert und mache entweder etwas falsch oder etwas muss sich geändert haben.

Ich verwende VS 2013 für .NET 4.5.1 und habe das Paket sqlite-netFx451-setup-bundle-x86-2013-1.0.96.0.exe von der Download-Seite system.data.sqlite.org installiert , sowie das System.Data.SQLite EF6-Paket vom NuGet Manager (der EF6 installiert).

Nachfolgend finden Sie meine aktuelle App.config-Datei (sie ist ziemlich unberührt, es sei denn, ich habe versucht, die Variablen Version, Culture und Public zu dem Typ hinzuzufügen):

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

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

Wenn ich beispielsweise versuche, eine Datenbank aus einem Modell zu generieren, wird der folgende Fehler angezeigt:

Für den ADO.NET-Anbieter wurde mit .__ kein Entity Framework-Anbieter gefunden. Invariantenname 'System.Data.SQLite.EF6'. Stellen Sie sicher, dass der Anbieter im Abschnitt "entityFramework" registriert ist ...

Ich habe versucht, die App.config-Datei durcheinander zu bringen und andere Anbieter und Anbieter hinzuzufügen, als alte Threads vorgeschlagen haben, aber ohne Erfolg. 

Wie kann ich dieses Problem beheben? Jede Hilfe wird sehr geschätzt!

Edit: Ich habe es geschafft, dass es gut genug funktioniert, um einen Ansatz der Datenbank zu verwenden. Hier sind die relevanten Teile meiner App.config-Datei:

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

Ich verwende EF 6.1.2 und System.Data.SQLite 1.0.96.0.

36
Simon

Ich habe den gleichen Fehler behoben, indem Sie einfach eine einzelne Zeile in App.config hinzufügen

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

PS: Hinzufügen von provider zu <configuration>> <entityFramework>> <providers>

Hier ist eine funktionierende 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>
  <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

Ich habe es endlich geschafft

Ich verwende: EF 6.1.3 http://www.Microsoft.com/en-us/download/details.aspx?id=40762 Und System .Data.SQLite 1.0.96.0 Sqlite-netFx451-setup-bundle-x86-2013-1.0.96.0.exe

Ich folgte der Beschreibung in: Die Datenbank erstellt zuerst ein Entity-Framework 6.1.1-Modell mit system.data.sqlite 1.0.93 .__ es auch)

Für die Datei app.config habe ich folgende Fixes verwendet: https://stackoverflow.com/a/24324212/885349 (Geschrieben von tomexou)

Schließlich wurde der SQLite Connector nicht im ADO.Net Entity Data Model Mapper angezeigt

Der fehlende Link war der Ordner\bin . Ich musste die Einstellung "Copy Local" = true für die folgenden DLLs festlegen:

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

Nur zur Vollständigkeit - hinzugefügt über Nuget und auch im Ordner\bin

  • EntityFramework 
  • EntityFramework.SqlServer

Und die SQLite Connection wurde gezeigt ...

5
CreateAHero

Nachdem ich eine Woche gesucht hatte, glaube ich, dass dieses Problem ein Entwicklungsmerkmal des sqlite-Teams ist.

Weitere Informationen finden Sie hier SQLite-Verbindung erscheint nicht im Entity Data Model Wizard

edit: Vielleicht lohnt es sich, nach verschiedenen Anbietern zu suchen. Obwohl ich dies selbst nicht getestet habe, bietet http://www.devart.com/dotconnect/ einige aussichtsreiche Alternativen und besagt EF-Kompatibilität.

3
ImP

Versuchen Sie diese Verbesserungen:

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

Siehe 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