Ich habe die folgende Fehlermeldung erhalten, als ich sqlce 4.0 mit entityframework 6.0 verwendete
No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlServerCe.4.0'
Meine app.config sieht so aus
....
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false" />
<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 -->
<!-- For more information on Entity Framework configuration, visit http://go.Microsoft.com/fwlink/?LinkID=237468 --></configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" >
<parameters>
<parameter value =" System.Data.SqlServerCe.4.0" />
</parameters>
</defaultConnectionFactory>
<!--providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers-->
</entityFramework>
<connectionStrings>
<add name="FbMultipleInsOrderContainer" connectionString="metadata=res://*/FbMultipleInsOrder.csdl|res://*/FbMultipleInsOrder.ssdl|res://*/FbMultipleInsOrder.msl;provider=System.Data.SqlServerCe.4.0;provider connection string="data source=|DataDirectory|\FBMultipleOrderSync.sdf"" providerName="System.Data.EntityClient" />
</connectionStrings>
...
Ich habe versucht, EF 6 erneut zu installieren. Aber es hat keinen Erfolg.
Jeder Hinweis darauf wäre sehr spürbar.
Überprüfen Sie nach der Installation des Pakets EntityFramework.SqlServerCompact nuget, ob Ihre app.config Folgendes enthält (wie in dem Kommentar von @ ErikEJ oben):
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />
</providers>
(Sie können die Zeile für SqlClient belassen, auch wenn Sie sie nicht wirklich benötigen.)
ErikEJ hat darauf hingewiesen, aber ich möchte die Tatsache hervorheben, dass Sie daran denken müssen, das Nuget-Paket zu installieren
EntityFramework.SqlServerCompact
Ich versuchte, der empfohlenen Antwort zu folgen, wusste jedoch nicht, dass ich nicht über das erforderliche NuGet-Paket verfügte, auf das App.config verweist.
Ich habe das Problem in meinen Unit-Tests getroffen. Das Tückische daran war, dass der Fehler nicht ständig aufgetaucht war ... Ich konnte es lösen, indem er die folgende Klasse hinzufügte.
public static class Trick
{
public static void FixEfProviderServicesProblem()
{
// this commented line should be used for SQL Server provider
//var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
// this is used for SQL Server CE provider
var instance = System.Data.Entity.SqlServerCompact.SqlCeProviderServices.Instance;
}
}
Um dies zu erreichen, müssen Sie lediglich den EntityFramework.SqlServerCompact
in der Package Manager Console registrieren.
Öffnen Sie dazu die Power Manager-Konsole und geben Sie den folgenden Befehl ein:
PM> Install-Package EntityFramework.SqlServerCompact
Mein Problem waren die Unit-Tests. Sie haben wahrscheinlich nur das Entity-Framework für Ihr Projekt installiert, nicht jedoch Ihre Komponententests. Um dies zu tun:
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf "Lösung" (nicht der Name Ihres Projekts).
Klicken Sie auf "NuGet-Pakete verwalten".
Suchen Sie nach EntityFramework und drücken Sie es
Neben [Projektname] .Tests wird wahrscheinlich kein Haken angezeigt
die angebotene Lösung ist korrekt, erklärt aber nicht, warum EF diese Assembly benötigt. Hier ist warum ...
In der Standardkonfiguration von EF können Sie über einen Abschnitt "defaultConnectionFactory" im gesamten EntityFramework verfügen. Diese Standard-Factory ist auf "LocalDbConnectionFactory" konfiguriert und ihr Parameter ist "mssqllocaldb".
Diese Factory erfordert intern "SqlServerCe.4.0", d. H. "SqlServerCompact".
Der Fehler tritt nur auf, wenn die EF ihre Standardverbindungszeichenfolge in DbContext verwendet. Wenn EF mit einer anderen angegebenen Verbindungszeichenfolge in Ihrer Konfiguration bereitgestellt wird, wird dieser Fehler nicht angezeigt. Weil EF standardmäßig die Standardverbindungsfactory verwendet.
wenn Sie "SqlServerCe 4.0" installieren, wird die Konfiguration von EF geändert und "LocalDbConnectionFactory" und der Parameter "mssqllocaldb" werden durch "SqlServer Ce 4.0" ersetzt. Die EF-Laufzeitumgebung kann auch die SqlServerCe4.0-Assembly finden (da sie nun Teil Ihrer Referenzen ist und sich physisch in Ihrer BIN befindet).
Es folgt die EF Config vor und nach der Installation von SQL Server Compact
ALTE Konfig:
<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" />
</providers>
</entityFramework>
Die neue Konfiguration ist wie folgt:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
<parameters>
<parameter value="System.Data.SqlServerCe.4.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />
</providers>
</entityFramework>
außerdem wurde der folgende Abschnitt hinzugefügt, um die neue Fabrik zu beschreiben
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SqlServerCe.4.0" />
<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>
</system.data>
So lösen Sie dieses Problem
Visual Studio-Menü -> Extras -> NuGet Package Manager -> NuGet-Pakete für Lösung verwalten
Wählen Sie die Registerkarte "Durchsuchen" und suchen Sie nach "EntityFramework.SqlServerCompact".
Es installieren.
Es sollte funktionieren.
Dieser Fehler ist auf einem Benutzer-PC aufgetreten. Der Benutzer hat einen vorherigen Fehler ignoriert "Der Abschnitt" DbProviderFactories "kann nur einmal pro Konfigurationsdatei angezeigt werden".
Offenbar hat DB2 die Maschinenkonfigurationsdatei auf ihrem PC durch Hinzufügen eines doppelten (und leeren) <DbProviderFactories />
-Tags beschädigt.
Die Lösung bestand darin, das leere Duplikat-Tag zu löschen. Die Maschinenkonfigurationsdatei befindet sich unter [WindowsDir]\Microsoft.Net\Framework [.NET-Version]\Config\Machine.config
Vergessen Sie nicht, dass die Package Manager Console app.config/web.config als Startup-Projekt ausgewählt hat!
Da es sich bei dem Programmierer nicht nur um einen Programmierer handelt, ist bereits ein Programmierer installiert, der EntityFramework.SqlServerCompact installiert hat, aber wenn ich meinen PC und die oben gezeigte Fehlermeldung "Run" anschaue, deinstalliere und installiere ich ihn erneut.