web-dev-qa-db-de.com

System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer kann nicht gefunden werden

Ich baue einen DbContext aus einer SqlConnection. Wenn ich es verwende, erhalte ich die folgende Fehlermeldung:

Der Entity Framework-Anbieter gibt 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version = 6.0.0.0, Kultur = neutral, PublicKeyToken = b77a5c561934e089' für den ADO.NET-Anbieter 'System.Data.SqlClient' nicht ein geladen.

Ich verwende 6.0.0-alpha2-11210.

Ich fand das seltsam, da ich einen Verweis auf Entity.SqlServer habe und dass es mir gelungen ist, das Problem zu beheben, indem die folgende Codezeile vor einer Abfrage eingefügt wird:

var patch_only = System.Data.Entity.SqlServer.SqlProviderServices.Instance;

Ist es ein Fehler der Alpha-Version?

Ich hoffe ich komme nicht zu spät. Ich verwende ASP.NET MVC 4 und Entity Framework 6 alpha 3 und bin auf ein ähnliches Problem gestoßen.

Ich habe mehrere Projekte in meiner Lösung. Die zwei Hauptprojekte sind:

MyProject.Infrastructure.EntityFramework
MyProject.Web

Im ersten Projekt würde ich alle meine Repositories, DbContext usw. einrichten. In diesem Projekt habe ich 2 Referenzen:

EntityFramework
EntityFramework.SqlServer

Das zweite Projekt ist meine Website. Es verwendet die Repositorys im ersten Projekt, um meine Daten zurückzugeben. Zum Beispiel:

private readonly IMyRepository myRepository;

public MyController(IMyRepository myRepository)
{
     this.myRepository = myRepository;
}

public ActionResult Details(int id)
{
     MyObject myObject = myRepository.FindById(id);

     return View();
}

Hier hatte ich meine Probleme und rief FindById an.

Alles, was ich tat, war, meiner Website die folgende Referenz hinzuzufügen:

EntityFramework.SqlServer

In meiner web.config:

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

Und unter dem schließenden system.webServer-Tag:

<entityFramework>
     <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
          <parameters>
               <parameter value="v11.0" />
          </parameters>
     </defaultConnectionFactory>
</entityFramework>

Ich hoffe das wird helfen.

13
Brendan Vogt

Was Sie getan haben, erstellt einen Verweis auf EntityFramework.SqlServer.dll. Es stellt sicher, dass diese Assembly mit dem Datenzugriffs-Assembly in den Ordner "bin" von Projekten kopiert wird.

Sie können dasselbe tun, indem Sie irgendwo in Ihrer Datenzugriffsassembly Folgendes hinzufügen:

Type _Hack = typeof(System.Data.Entity.SqlServer.SqlProviderServices)
38
Fabrice

Das Problem ist die Referenz "EntityFramework.SqlServer".  

Wenn ich in meinem Projekt Entity Framework 6.0.1 mithilfe von NuGet in der Datenzugriffsebene hinzugefügt habe, habe ich auf der Clientseite den gleichen Fehler erhalten, da diese Referenz auf der Clientseite nicht vorhanden ist. 

Also löste ich das Problem, indem ich diese Referenz auch auf der Clientseite hinzufügte.

10
Eren

Ich verwende EF 4 und EF 6, zwei verschiedene Projekte in derselben Lösung. 

Nach der Verwendung von NuGet für EF 6.0 wurden alle Verweise auf EF 4 in meinem Testprojekt entfernt. Ich musste EF6 wieder aus dem Projekt entfernen und fügte Verweise auf System.Data.Entity für EF4 hinzu.

Um auf Daten über EF6 im Testprojekt zuzugreifen, musste ich manuell auf EntityFramework.SqlServer.dll (4.5) verweisen und die Hack-Empfehlung (oben) verwenden.

In der app.config meines Testprojekts mussten keine Änderungen vorgenommen werden.

nein

 <section name="entityFramework" ...

und nein

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> ...
1
Karl

Wenn Sie Probleme mit einer brandneuen MVC-Site aus der Vorlage haben: 1) Deinstallieren Sie Microsoft.ASPNet.Identity.EntityFramework (es werden Sie gefragt, ob Sie Entity Framework deinstallieren möchten. .2) Installieren Sie Entity Framework 3) Installieren Sie Microsoft.ASPNET.Identity.EntityFramework erneut

Sollte jetzt funktionieren.

0
MarkWalls

@ LeLong37

Ich hatte genau den gleichen Fehler wie Sie: "... Kein Entity Framework-Anbieter für 'System.Data.SqlServerCe.4.0' ADO.NET-Provider ... gefunden."

Ich habe es gelöst, indem ich einen Verweis auf "EntityFramework.SqlServerCompact" aus dem Verzeichnis "packages\EntityFramework.SqlServerCompact.6.0.0-rc1\lib\net40" hinzugefügt habe.

hoffe das hilft 

0
Tobias Koller

Ich habe einen Screencast bei Youtube hinzugefügt, der dies und die Lösung in etwa 6 Minuten beschreibt. Ich habe dies getan, weil die von Fabrice bereitgestellte Lösung nicht funktioniert, wenn Sie mit Team Build arbeiten, das zu demselben Problem führt.

0