it-swarm.com.de

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

Nachdem Sie die EF6 per Nuget heruntergeladen und versucht haben, mein Projekt auszuführen, wird der folgende Fehler ausgegeben:

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 .

enter image description here

487

Ich hatte gerade das gleiche Problem und es sieht aus wie EntityFramework, obwohl die Installation von NuGet Package Manager nicht korrekt im Projekt installiert wurde.

Ich konnte das Problem beheben, indem Sie den folgenden Befehl in Package Manager Console ausführen:

PM> Install-Package EntityFramework
532
douglaslps

Sie haben EF zu einem Klassenbibliothekprojekt hinzugefügt. Sie müssen es auch dem Projekt hinzufügen, das es referenziert (Ihre Konsolen-App, Website oder was auch immer).

359
Clément Picou

Sie müssen Entity Framework nicht in Ihrer Console-Anwendung installieren. Sie müssen lediglich einen Verweis auf die Assembly EntityFramework.SqlServer.dll hinzufügen. Sie können diese Assembly aus dem Class Library-Projekt, das Entity Framework verwendet, in einen LIB-Ordner kopieren und einen Verweis darauf hinzufügen. 

In Summe:

  • Klassenbibliothek Anwendung:
    • Installieren Sie Entity Framework 
    • Schreiben Sie Ihren Datenschichtcode 
    • die Datei app.config enthält alle mit Entity Framework verbundenen Konfigurationen, mit Ausnahme der Verbindungszeichenfolge. 
  • Erstellen Sie eine Konsolen-, Web- oder Desktopanwendung:
    • Fügen Sie einen Verweis auf das erste Projekt hinzu. 
    • Fügen Sie einen Verweis auf EntityFramework.SqlServer.dll hinzu. 
    • app.config/web.config enthält die Verbindungszeichenfolge (Denken Sie daran, dass der Name des Konfigurationseintrags mit dem Namen der DbContext-Klasse identisch sein muss). 

Ich hoffe, es hilft.

194

Sie können diese Nachricht auch anzeigen, wenn Sie vergessen, EntityFramework.SqlServer.dll "einzuschließen. 

Es scheint eine neu hinzugefügte Datei in EF6 zu sein. Anfangs hatte ich es nicht in mein Merge-Modul aufgenommen und bin auf das hier aufgeführte Problem gestoßen.

109
Mike

Wenn Sie Entity Framework 6 über Nuget installieren. EntityFramework.SqlServer verfehlt manchmal eine andere ausführbare Datei. Fügen Sie einfach das Paket Nuget zu diesem Projekt hinzu.

Manchmal funktioniert oben nicht für Test Project

Um dieses Problem in Test Project zu lösen, platzieren Sie diese Methode einfach in Test Project:

public void FixEfProviderServicesProblem()
{
    var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}

Diese Methode wurde nie aufgerufen, aber der Compiler wird nach meinen Beobachtungen alle "unnötigen" Assemblys entfernen, und ohne die Verwendung des Befehls EntityFramework.SqlServer schlägt der Test fehl. 

45
Umar Abbas

Anstatt EntityFramework.SqlServer zu einem Host-Projekt hinzuzufügen, können Sie eine statische Referenz auf Ihr Projekt/Entity-Projekt wie folgt sicherstellen 

static MyContext()
{
    var type = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
    if(type == null)
        throw new Exception("Do not remove, ensures static reference to System.Data.Entity.SqlServer");
}

Dadurch wird der Build-Prozess das Assembly mit dem Host-Projekt enthalten. 

Mehr Infos auf meinem Blog http://andersmalmgren.com/2014/08/20/implicit-dependencies-and-copy-local-fails-to-copy/

44
Anders

Fügen Sie diese Funktion hinzu 

private void FixEfProviderServicesProblem()

in die Datenbankkontextklasse in der Bibliotheksklasse und die fehlende DLL EntityFramework.SqlServer.dll werden an die richtigen Stellen kopiert.

namespace a.b.c
{
    using System.Data.Entity;

    public partial class WorkflowDBContext : DbContext
    {
        public WorkflowDBContext()
            : base("name=WorkflowDBConnStr")
        {
        }

        public virtual DbSet<WorkflowDefinition> WorkflowDefinitions { get; set; }
        public virtual DbSet<WorkflowInstance> WorkflowInstances { get; set; }
        public virtual DbSet<EngineAlert> EngineAlerts { get; set; }
        public virtual DbSet<AsyncWaitItem> AsyncWaitItems { get; set; }
        public virtual DbSet<TaskItem> TaskItems { get; set; }
        public virtual DbSet<TaskItemLink> TaskItemLinks { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
        }

        private void FixEfProviderServicesProblem()
        {
            // The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer'
            // for the 'System.Data.SqlClient' ADO.NET provider could not be loaded. 
            // Make sure the provider Assembly is available to the running application. 
            // See http://go.Microsoft.com/fwlink/?LinkId=260882 for more information.
            var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
        }
    }
}

.

21
Johannes

Nichts davon hat für mich gearbeitet. Ich habe die Lösung in einer anderen stackoverflow-Frage gefunden. Ich werde es hier als Referenz hinzufügen:

Sie müssen eine Referenz erstellen, damit sie in die Anwendung .__ kopiert wird. Pfad. Weil später in Runtime darauf verwiesen wird. Sie tun es also nicht. müssen alle Dateien kopieren.

private volatile Type _dependency;

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

Ich habe den gleichen Fehler erhalten, als ich Entity Framework 6 mit SQL Server Compact 4.0 verwendete. Der Artikel zu MSDN für Entity Framework Providers für EF6 war hilfreich. Das Ausführen der entsprechenden Providerbefehle als Nuget-Pakete in der Package Manager Console kann das Problem lösen, da NuGet-Pakete automatisch Registrierungen zur Konfigurationsdatei hinzufügen. Ich lief PM> Install-Package EntityFramework.SqlServerCompact, um das Problem zu lösen.

8
MaySara

Wenn der Fehler in Testprojekten auftritt, besteht die schönste Lösung darin, die Testklasse mit zu dekorieren:

[DeploymentItem("EntityFramework.SqlServer.dll")]
6
Alberto Juan

Dieses Problem stieß heute bei der Arbeit mit einer Reihe von Web-Services in jeweils unterschiedlichen Projekten und einem separaten Projekt mit Integrationstests für einige dieser Services. 

Ich habe dieses Setup seit einiger Zeit mit EF5 verwendet, ohne EF-Referenzen aus dem Integrationstestprojekt hinzufügen zu müssen. 

Nun, nach dem Upgrade auf EF6, scheint es, als müsste ich auch einen Verweis auf EF6 in das Integrationstestprojekt aufnehmen, obwohl es dort nicht verwendet wird (so ziemlich wie oben in user3004275 angegeben).

Hinweise, dass Sie das gleiche Problem haben:

  • Anrufe direkt an EF (Verbindung zu einer Datenbank, Abrufen von Daten usw.) funktionieren einwandfrei, sofern sie von einem Projekt initiiert werden, das Referenzen zu EF6 hat. 
  • Aufrufe des Dienstes über eine veröffentlichte Dienstschnittstelle funktionieren einwandfrei; d. h. es fehlen "interne" Verweise im Dienst.
  • Aufrufe direkt an öffentliche Methoden im Serviceprojekt von einem Projekt außerhalb des Service verursachen diesen Fehler, obwohl EF in diesem Projekt selbst nicht verwendet wird. nur intern im aufgerufenen Projekt 

Der dritte Punkt ist, was mich für eine Weile abgewiesen hat, und ich bin mir immer noch nicht sicher, warum dies erforderlich ist. Das Hinzufügen eines Refs zu EF6 in meinem Integrationstest-Projekt löste es auf jeden Fall ... 

4
Kjartan

Ich bin gerade heute auf dieses Problem gestoßen. Ich habe eine Daten-Repository-Klassenbibliothek mit dem EF63 NuGet-Paket und einer Konsolenanwendung zum Testen, die nur auf Klassenbibliothekprojekte verweisen. Ich erstellte einen sehr einfachen Post-Build-Befehl, der EntityFramework.SqlServer.dll aus dem Bin\Debug-Ordner der Klassenbibliothek in den Bin\Debug-Ordner der Konsolenanwendung kopiert und das Problem gelöst. Vergessen Sie nicht, den Abschnitt entityFramework zur .config-Datei der Konsolenanwendung hinzuzufügen.

4
Ondřej

Fügen Sie unten Ihrer app.config hinzu.

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

Das Löschen des BIN-Ordners hat es für mich getan

3
David

Sie sollten einen statischen Verweis auf die EntityFramework.SqlServer.dll Assembly erzwingen. Statt jedoch einen Dummy-Code zu setzen, können Sie dies auf eine schönere Weise tun:

  1. Wenn Sie bereits eine DbConfiguration -Klasse haben:

    public class MyConfiguration : DbConfiguration
    {
        public MyConfiguration()
        {
            this.SetProviderServices(System.Data.Entity.SqlServer.SqlProviderServices.ProviderInvariantName, System.Data.Entity.SqlServer.SqlProviderServices.Instance);
        }
    }
    
  2. Wenn Sie nicht über eine DbConfiguration -Klasse verfügen, müssen Sie beim Start der App den folgenden Code eingeben (bevor EF verwendet wird):

    static MyContext()
    {
        DbConfiguration.Loaded += (sender, e) =>
            e.ReplaceService<DbProviderServices>((s, k) => System.Data.Entity.SqlServer.SqlProviderServices.Instance);
    }
    
3

Ich habe gerade erst das Entity Framework mit Nuget .. installiert und folge den Anweisungen, die auf dem folgenden Link stehen: http://robsneuron.blogspot.in/2013/11/entity-framework-upgrade) -to-6.html

Ich denke, das Problem wird gelöst.

2
Kuntal Ghosh

Ich hatte auch ein ähnliches Problem. Mein Problem wurde folgendermaßen gelöst:

 enter image description here

 enter image description here

2
BehrouzMoslem

Das Startprojekt, das auf das Projekt verweist, in dem Entity Framework verwendet wird, benötigt die folgenden zwei Assemblys im Ordner bin:

  • EntityFramework.dll
  • EntityFramework.SqlServer.dll

Durch Hinzufügen eines <section> zum <configSections> der .config-Datei im Startprojekt wird die erste Assembly in diesem bin-Verzeichnis verfügbar. Sie können dies aus der .config-Datei Ihres Entity Framework-Projekts kopieren:

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

Um die zweite .dll im Bin-Ordner verfügbar zu machen, ist dies zwar nicht praktikabel, jedoch kann eine manuelle Kopie aus dem Bin-Ordner des Entity Framework-Projekts erstellt werden .. Eine bessere Alternative ist das Hinzufügen zu den Post-Build-Ereignissen der Entität Das Framework projiziert die folgenden Zeilen, die den Prozess automatisieren:

cd $(ProjectDir)
xcopy /y bin\Debug\EntityFramework.SqlServer.dll ..\{PATH_TO_THE_PROJECT_THAT_NEEDS_THE_DLL}\bin\Debug\
2
Leonel B.

Ich hatte eine Konsolenanwendung und eine Klassenbibliothek. In der Klassenbibliothek habe ich Entity Data Model erstellt (Rechtsklick auf Klassenbibliothek> Hinzufügen> Neues Element> Daten> ADO.NET Entity Data Model 6.0) und die Referenz in die Konsolenanwendung einfügen. Sie haben also eine Konsolenanwendung, die auf die Klassenbibliothek verweist, und innerhalb der Klassenbibliothek haben Sie ein EF-Modell. Ich hatte den gleichen Fehler, als ich versuchte, Datensätze aus der Tabelle zu erhalten. 

Ich habe dieses Problem mit den folgenden Schritten behoben:

  1. Klicken Sie mit der rechten Maustaste auf die Lösung und wählen Sie die Option "NuGet-Pakete für Lösung verwalten". Das NuGet-Paket-Manager-Fenster wird angezeigt.
  2. Gehen Sie zur Option "Verwalten" unter "Installierte Pakete" TIPP: Entity Framework wird zur Klassenbibliothek hinzugefügt. Sie haben also EntityFramework unter "Installierte Pakete" und die Option "Verwalten"
  3. Klicken Sie auf "Verwalten" und aktivieren Sie das Kontrollkästchen, um das Paket in einem Projekt zu installieren, das auf eine Klassenbibliothek mit einem EF-Modell verweist.

Das war alles was ich tun musste und alles hat perfekt funktioniert.

Ich hoffe es hat geholfen.

1
dkkd

Stellen Sie außerdem sicher, dass das Startprojekt das Projekt ist, das Ihren dbcontext (oder die entsprechende app.config) enthält. Ich habe versucht, ein Website-Projekt zu starten, das nicht alle erforderlichen Konfigurationseinstellungen hatte.

1
user2588362

Ich habe den gleichen Fehler. Es ist seltsam, dass es nur dann vorkommt, wenn ich mit meinem dbContext nach einem Modell meines Modells frage oder seine Liste abrufe:

var results = _dbContext.MyModel.ToList();

Wir haben versucht, das Entity Framework erneut zu installieren, es richtig zu verweisen, jedoch ohne Erfolg.

Glücklicherweise haben wir versucht, das Nuget auf ALL-Lösungen zu überprüfen, dann alles zu aktualisieren oder sicherzustellen, dass everything dieselbe Version ist, da wir festgestellt haben, dass die beiden Projekte unterschiedliche EF-Versionen im Webprojekt haben. Und es funktioniert. Der Fehler ist weg.

Hier ist der Screenshot zum Verwalten von Nuget für alle Lösungen:

 enter image description here

1
Willy David Jr

alle Ich brauche Ihre Aufmerksamkeit, dass zwei dll EntityFramework.dll und EntityFramework.SqlServer.dll DataAccess-Schichtbibliothek sind. Es ist nicht logisch, sie in der Ansicht oder einer anderen Schicht zu verwenden.

logischer Weg ist, dass das Attribut 'enitiess' entfernt und durch Fluent API ersetzt wird. Dies ist eine echte Lösung

1
Vahid Akbari

es scheint, als hätte niemand erwähnt, ob das System.Data.SqlClient im System installiert ist und ob darauf Bezug genommen wird.

ich habe mein Problem durch Installieren von System.Data.SqlClient und Hinzufügen eines neuen Providers in app.Config gelöst

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

Ich habe fast alles probiert und nichts hat funktioniert.

Erst wenn ich die referenzierten DLLs im Default Project EntityFramework und EntityFramework.SqlServer-Eigenschaften Copy Local auf True setze, fing es an zu arbeiten!

1
SharpC

Die Nachricht zeigt, dass wir den Anbieter System.Data.SqlClient hinzufügen müssen. Aus diesem Grund müssen wir das Nuget-Paket von EntityFramework installieren, das über zwei DLL verfügt. Wenn wir jedoch nur eine Konsolenanwendung entwickeln, müssen wir lediglich die Referenz EntityFramework.SqlServer.dll hinzufügen

0

Hinweis: Ich hatte dieses Problem beim Generieren von Datenbank-SQL von Model. Es hatte alle Tabellen erstellt, die Änderungen aber nicht exportiert. Beachten Sie, dass dieser Fehler generiert wird, wenn Sie versuchen, SQL mithilfe der DDL-Generierungsvorlage als SSDLtoSQL10 zu exportieren. Hier wird eine MySQL-Verbindung erwartet. Stellen Sie daher sicher, dass Sie aus den Dropdown-Listenfeldern für die DDL-Generierung SSDLtoMySQL in den Modelleigenschaften auswählen. Verbrachte einen ganzen Tag damit!

0
Excalibur2000

Ich hatte die identische Ausnahme geworfen. Ich eingeschlossen 

using System.Data; 
using System.Data.Entity;

und alles ist wieder an der Arbeit .. 

0
kneerunjun

In meinem Fall funktionierte alles einwandfrei und hörte plötzlich auf, weil Resharper einige Änderungen vorgenommen hatte, die das Problem verursachten. Mein Projekt wurde in die Datenschicht, die Service- und die Präsentationsschicht unterteilt. Ich hatte das Entity-Framework in meiner Datenschicht installiert und referenziert, aber der Fehler ist nicht verschwunden. Deinstallation und Neuinstallation funktionierten ebenfalls nicht. Schließlich löste ich es durch die Datenschicht zum Startprojekt machen, die Migration durchführen, die Datenbank aktualisieren und das Startprojekt wieder in meine Präsentationsschicht ändern.

0
Alf Moh

Ich hatte das gleiche Problem. Ich habe gerade die App Config-Datei aus dem Projekt, das den DBContext enthielt, in mein Testprojekt kopiert 

0

Ich hatte ein verwandtes Problem bei der Migration von einer CE-Datenbank zu SQL Server unter Azure. Vergeudete gerade 4 Stunden, um zu versuchen, dieses zu lösen. Hoffentlich kann dies jemandem ein ähnliches Schicksal ersparen. Für mich hatte ich in meiner packages.config-Datei einen Verweis auf SqlCE. Das Entfernen löste mein gesamtes Problem und erlaubte mir, Migrationen zu verwenden. Yay Microsoft für einen anderen Tech mit unnötig komplexen Setup- und Konfigurationsproblemen. 

0
user2662643

Sie verpassen gerade einen Verweis auf EntityFramework.SqlServer.dll. Für EntityFramework-Projekte, die SQL Server verwenden, sind die zwei Dateien, auf die Sie sich beziehen müssen, EntityFramework.SqlServer.dll und EntityFramework.dll

0
user2956314

Erweitern Sie die Datei YourModel.edmx, und öffnen Sie die Klasse YourModel.Context.cs unter YourModel.Context.tt. 

Ich habe die folgende Zeile im Verwendungsabschnitt hinzugefügt und der Fehler wurde für mich behoben.

using SqlProviderServices = System.Data.Entity.SqlServer.SqlProviderServices;

Möglicherweise müssen Sie diese Zeile bei jeder automatischen Generierung der Datei hinzufügen.

0
user2347528

Installieren Sie einfach das EntityFramework-Paket in Ihrem Web/Console-Projekt. Das sollte den Abschnitt zu Ihrer Konfigurationsdatei hinzufügen.

0
Vijaya Malla