web-dev-qa-db-fra.com

Impossible de trouver System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer

Je construis un DbContext à partir d'un SqlConnection. Lorsque je l'utilise, je reçois le message d'erreur suivant:

Le type de fournisseur Entity Framework 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version = 6.0.0.0, Culture = neutre, PublicKeyToken = b77a5c561934e089' pour le fournisseur 'System.Data.SqlClient' ne pouvait pas être chargé.

J'utilise 6.0.0-alpha2-11210.

J'ai trouvé cela bizarre puisque j'ai une référence vers Entity.SqlServer et que j'ai réussi à le "réparer" en mettant la ligne de code suivante avant une requête:

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

Est-ce un bug de la version alpha?

21

J'espère que je ne suis pas en retard. J'utilise ASP.NET MVC 4 et Entity Framework 6 alpha 3 et j'ai rencontré un problème similaire.

J'ai plusieurs projets dans ma solution. Les 2 projets principaux sont:

MyProject.Infrastructure.EntityFramework
MyProject.Web

Dans le premier projet, je mettrais en place tous mes référentiels, DbContext, etc. etc. Dans ce projet, j'ai 2 références:

EntityFramework
EntityFramework.SqlServer

Le deuxième projet est mon site web. Il utilise les référentiels du premier projet pour renvoyer mes données. Par exemple:

private readonly IMyRepository myRepository;

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

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

     return View();
}

C’est là que j’ai eu mes problèmes en appelant FindById.

Tout ce que j'ai fait a été d'ajouter la référence suivante à mon site Web:

EntityFramework.SqlServer

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

Et sous la balise de fermeture system.webServer:

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

J'espère que cela aidera.

13
Brendan Vogt

Ce que vous avez créé crée une référence à EntityFramework.SqlServer.dll. Cela garantit que cet ensemble est copié dans le dossier bin des projets utilisant votre ensemble d'accès aux données.

Vous pouvez faire la même chose en ajoutant quelque chose comme ce qui suit dans votre ensemble d'accès aux données:

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

Le problème est la référence "EntityFramework.SqlServer".  

Dans mon projet, lorsque j'ai ajouté Entity Framework 6.0.1 en utilisant NuGet dans la couche d'accès aux données, la même erreur s'est produite du côté client, car ce dernier ne dispose pas de cette référence. 

J'ai donc résolu le problème en ajoutant cette référence également du côté client.

10
Eren

J'utilise EF 4 et EF 6 dans deux projets différents dans la même solution. 

Après avoir utilisé NuGet for EF 6.0, toutes les références à EF 4 ont été supprimées dans mon projet test. J'ai dû supprimer EF6 du projet et ajouté des références à System.Data.Entity pour EF4.

Pour accéder aux données via EF6 dans le projet test, je devais référencer manuellement EntityFramework.SqlServer.dll (4.5) et utiliser la recommandation Hack (ci-dessus).

Il n'y avait aucun besoin de faire des alternances dans app.config de mon projet de test.

non

 <section name="entityFramework" ...

et non

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

Si vous rencontrez des problèmes avec un tout nouveau site MVC à partir du modèle: 1) Désinstallez Microsoft.ASPNet.Identity.EntityFramework (Il vous sera demandé si vous souhaitez désinstaller Entity Framework - continuez ainsi.) .2) Installez Entity Framework 3) Réinstallez Microsoft.ASPNET.Identity.EntityFramework

Devrait travailler maintenant.

0
MarkWalls

@ LeLong37

J'ai eu exactement la même erreur que vous: "... Aucun fournisseur Entity Framework trouvé pour 'System.Data.SqlServerCe.4.0' Fournisseur ADO.NET ..."

Je l'ai résolu en ajoutant une référence à "EntityFramework.SqlServerCompact" du répertoire "packages\EntityFramework.SqlServerCompact.6.0.0-rc1\lib\net40"

j'espère que cela t'aides 

0
Tobias Koller

J'ai ajouté un screencast sur Youtube décrivant ceci et la solution en 6 minutes environ. Je l’ai fait parce que la solution fournie par Fabrice ne fonctionne pas lorsque vous travaillez avec Team Build, qui rencontre le même problème.

0
Alexander Schmidt