599 votes

Aucun fournisseur Entity Framework trouvé pour le fournisseur ADO.NET avec le nom d'invariant 'System.Data.SqlClient'.

Après avoir téléchargé l'EF6 par nuget et essayer d'exécuter mon projet, il retourne l'erreur suivante :

Aucun fournisseur Entity Framework trouvé pour le fournisseur ADO.NET avec le nom d'invariant 'System.Data.SqlClient'. Vérifiez que le fournisseur est enregistré dans la section 'entityFramework' du fichier de configuration de l'application. Voir http://go.microsoft.com/fwlink/?LinkId=260882 pour plus d'informations.

enter image description here

0 votes

J'utilise EF5 sans le providers y provider donc envisager de l'enlever ?

1 votes

Mettez une copie de votre chaîne de connexion ici

0 votes

La chaîne de connexion est dans l'image (App.confing), d'ailleurs elle est très simple, j'appelle le constructeur, public BaseStorage(): base ("RaptorDB") {} Dans EF5, BaseStorage() hérite de DbContext, tout fonctionne parfaitement, mais pas dans EF6.

671voto

douglaslps Points 1275

Je viens de rencontrer le même problème et il semble qu'EntityFramework, bien qu'installé à partir du NuGet Package Manager, n'ait pas été correctement installé dans le projet.

J'ai réussi à le réparer en exécutant la commande suivante sur Console du gestionnaire de paquets :

PM> Install-Package EntityFramework

37 votes

Le PMC a écrit que 'EntityFramework 6.0.1' était déjà installé, mais je l'ai ajouté à mon application console (qui n'utilise PAS EF), mais cela a marché pour moi aussi. Si je supprime EF des références de l'application console, l'erreur revient, mais je n'obtiens pas cela - mon application console utilise le projet de dépôt (qui utilise EF) Merci pour votre aide !

0 votes

Pour ma solution, l'installation normale d'entityframework a fonctionné pour tous les projets concernés, sauf un. Cette réponse a permis de résoudre le problème pour ce dernier également.

35 votes

N'oubliez pas d'ajouter -ProjectName <ProjectName> à la ligne de commande si vous avez plusieurs projets dans votre solution... ! !!

411voto

user3004275 Points 701

Vous avez ajouté EF à un projet de bibliothèque de classes. Vous devez également l'ajouter au projet qui le référence (votre application console, votre site web ou autre).

270 votes

C'est une réponse absolument ridicule. Pourquoi diable aurais-je besoin de faire ça ? Et vous savez ce qui est encore plus ridicule ? Ca marche.

19 votes

Voir ma réponse ci-dessous, vous n'avez pas besoin d'installer EF dans votre application console.

8 votes

Votre réponse est correcte. Il suffit d'ajouter la référence EntityFramework.SqlServer.dll au projet frontend qui utilise une bibliothèque avec EF, pour résoudre le problème. Donc ne pas utiliser ce EF (seulement la DLL)

223voto

Vous n'avez pas besoin d'installer Entity Framework dans votre application Console, il vous suffit d'ajouter une référence à l'assemblage EntityFramework.SqlServer.dll. Vous pouvez copier cet assemblage depuis le projet Class Library qui utilise Entity Framework vers un dossier LIB et y ajouter une référence.

En résumé :

  • Application de la bibliothèque de classe :
    • Installer Entity Framework
    • Écrivez votre code de couche de données
    • Le fichier app.config contient toute la configuration relative à Entity Framework, à l'exception de la chaîne de connexion.
  • Créez une console, une application web ou de bureau :
    • Ajoutez une référence au premier projet.
    • Ajouter une référence à EntityFramework.SqlServer.dll.
    • app.config/web.config contient la chaîne de connexion (n'oubliez pas que le nom de l'entrée de configuration doit être le même que le nom de la classe DbContext.

J'espère que cela vous aidera.

20 votes

Bonne réponse. Vous n'avez pas besoin d'installer EF. EntityFramework.SqlServer.dll .

15 votes

Je suis d'accord. C'est tout à fait la bonne réponse. Faire référence à une dll qui fait 1/2 mb ou tirer le projet EF nuget qui fait >5,5 mb. Cela réduit aussi un peu l'intérêt de l'architecture multi tiers. C'est vraiment un mauvais exemple de la part de MS : J'ai 4 niveaux et mon niveau supérieur ne devrait pas avoir de raison de connaître quoi que ce soit sur EF.

20 votes

C'est toujours ridicule de toute façon. Par exemple, pourquoi un frontal aurait-il besoin d'une référence à SqlServer ? Le front-end ne pourrait pas s'en soucier moins, dans mon cas. Mais cela fonctionne. +1

116voto

Mike Points 470

Vous pouvez également voir ce message si vous oubliez de inclure "EntityFramework.SqlServer.dll".

Il semble qu'il s'agisse d'un fichier nouvellement ajouté dans EF6. Initialement, je ne l'avais pas inclus dans mon module de fusion et j'ai rencontré le problème mentionné ici.

7 votes

J'ai rencontré ce problème lorsque j'avais précédemment un projet (a) avec une référence à un projet (b) qui avait une référence à EF. Après avoir nettoyé et supprimé le dossier bin du projet (a), puis reconstruit, la référence EF est apparue, mais pas EF.SqlServer.dll. Copier ceci manuellement a fonctionné pour moi

2 votes

@dan richardson merci d'avoir mentionné de 'supprimer le dossier de la corbeille'.

0 votes

J'ai eu cette erreur en essayant d'exécuter un LINQPad script après une mise à jour de EF6. Même le fait de référencer EntityFramework.SqlServer.dll dans LINQPad n'a pas réglé le problème JUSQU'À ce que je reconstruise ma solution dans VS2013. La nouvelle référence s'est alors résolue correctement dans LINQPad et mon script s'est exécuté !

50voto

Umar Abbas Points 188

Lorsque vous installez Entity Framework 6 via Nuget . EntityFramework.SqlServer manque parfois pour un autre exécutable. Il suffit d'ajouter le Nuget à ce projet.

Parfois, ce qui précède ne fonctionne pas pour le projet de test

Pour résoudre ce problème dans le projet de test, il suffit de placer cette méthode dans le projet de test :

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

Cette méthode n'est jamais appelée, mais d'après mes observations, le compilateur supprimera tous les assemblages "inutiles" et sans utiliser la fonction EntityFramework.SqlServer stuff le test échoue.

3 votes

Ce n'est pas très joli mais cela a résolu le problème que j'avais dans mon projet de test. Aucune des autres solutions n'a fonctionné.

0 votes

Dans mon cas, il a suffi d'ajouter l'Entity Framework à mon projet de test dans "Manage Nuget packets for the solution".

0 votes

En fait, vous devez mettre dans n'importe quel projet (pas seulement test) pour être sûr que System.Data.Entity.SqlServer sera inclus dans "results lib set" après la compilation (note : Unity ou un autre outil IoC pourrait changer cette règle et vous devrez appeler ce code depuis le projet test).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X