it-swarm.com.de

Für den ADO.NET-Anbieter mit dem unveränderlichen Namen 'System.Data.SqlClient' wurde kein Entity Framework-Anbieter gefunden.

Wir verwenden EntityFramework 6 mit Code First. Wir haben eine Konsolenanwendung, die keinen Bezug zu EntityFramework hat, aber die Verbindungszeichenfolge aus ihrer App.config liest. Es ruft die DatabaseInitializationUtilities-Assembly auf, wobei die Verbindungszeichenfolge als Parameter übergeben wird. 

DatabaseInitializationUtilities enthält den Verweis auf EF6 (EntityFramework und EntityFramework.SqlServer). Seine App.config lautet wie folgt:

<?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.serviceModel>
         <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IAuthentication" />
            </basicHttpBinding>
         </bindings>
         <client>
            <endpoint address="http://localhost/SecurityServices/Authentication.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IAuthentication" contract="SecurityService.IAuthentication" name="BasicHttpBinding_IAuthentication" />
         </client>
      </system.serviceModel>
      <entityFramework>
         <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
            <parameters>
               <parameter value="v11.0" />
            </parameters>
         </defaultConnectionFactory>
         <providers>
            <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
         </providers>
      </entityFramework>
   </configuration>

Wenn die Ausführung eine Zeile erreicht, in der DatabaseInitializationUtilities versucht, ein Skript auszuführen

context.Database.ExecuteSqlCommand(script.ScriptText)

der Fehler wird ausgelöst:

Für den ADO.NET-Anbieter mit dem unveränderlichen Namen 'System.Data.SqlClient' wurde kein Entity Framework-Anbieter gefunden. Stellen Sie sicher, dass der Provider im Abschnitt "entityFramework" der Konfigurationsdatei der Anwendung registriert ist. Weitere Informationen finden Sie unter http://go.Microsoft.com/fwlink/?LinkId=260882 .

Ich glaube, das Mittel ist genau das, was ich in meiner Konfigurationsdatei habe, daher verstehe ich das Problem nicht.

ANMERKUNG: Resharper macht den Knoten bluelining und meldet "Das Element 'EntityFramework' hat ein ungültiges untergeordnetes Element 'provider'. Der Abschnitt wurde jedoch von NuGet eingefügt, als ich EF6 installierte.

Irgendwelche Ideen?

34
Dewey

Sie müssen eine Referenz erstellen, damit sie in den Debug-Ordner kopiert wird. So kann später auf die Laufzeit zugegriffen werden. 

Kopieren Sie keine Dateien, sondern erstellen Sie einfach diese Referenz:

private volatile Type _dependency;

public MyClass()
{
    _dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
}
50
dhcgn

haben Sie die Assembly EntityFramework.SqlServer.dll in Ihrem Anwendungspfad?. Ich hatte das gleiche Problem und nach dem Kopieren der DLL in den Anwendungspfad funktionierte jedes Thing einwandfrei.

17
Thomas
13
Motty

Ich hatte auch dieses Problem. Bei der Ausführung meiner .net mvc-App funktionierte alles lokal, aber als ich sie veröffentlichte, erhielt ich diesen Fehler. Das Problem war, dass ich auf EntityFrameworl.SqlServer auch in meinem Webprojekt verweisen musste, obwohl ich ein separates Projekt für Data hatte. Merkwürdig ist, dass dieser Fehler nur bei der Veröffentlichung der App ausgelöst wurde. Dies ist ein schwerwiegender Fehler, der wahrscheinlich von Microsoft stammt. Ich habe EF 6.1.1 verwendet.

5
TheMentor

Dies liegt daran, dass EntityFramework.SqlServer.dll nicht in Ihr Projekt kopiert wird. Fügen Sie diese DLL hinzu und es wird hoffentlich funktionieren. Sie finden das in dem Projekt, in dem Sie das Datamodel hinzugefügt haben.

4
Baqer Naqvi

Für mich stellte sich heraus, dass mein Provider-Verweis in der Datei web.config nicht korrekt war. Ich glaube, dass das Nuget-Paket den Provider möglicherweise nicht richtig enthält.

Ich habe meinen Provider damit ersetzt und es hat funktioniert:

  <entityFramework>
      <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
      <providers>
          <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      </providers>
  </entityFramework>
2
David Price

Ich hatte auch ein ähnliches Problem

Mein Problem wurde folgendermaßen gelöst:  enter image description here

 enter image description here

0
BehrouzMoslem

Fügen Sie "EntityFramework.SqlServer.dll" in Ihren Projektordner ein, um Ihr Problem zu beheben.

0
vishal

Ich neige dazu, EntityFramework dem Webprojekt sowie der Assembly hinzuzufügen, die tatsächlich darauf verweist.

0
David Hyde

Der beste Weg, ein solches Problem zu lösen, besteht darin, die Referenz EntityFramework.SqlServer.dll in Ihr Projekt aufzunehmen. Drücken Sie F4 (in den Eigenschaften) App wird in den veröffentlichten Ordner kopiert.

0
Muhammad Saqib