Aucun fournisseur Entity Framework trouvé pour le fournisseur ADO.NET avec un nom invariant ‘System.Data.SqlClient’

Après avoir téléchargé l’EF6 par nuget et essayé d’exécuter mon projet, il renvoie l’erreur suivante:

Aucun fournisseur Entity Framework trouvé pour le fournisseur ADO.NET avec le nom invariant ‘System.Data.SqlClient’. Assurez-vous 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.

entrer la description de l'image ici

J’ai juste eu le même problème et il semble que EntityFramework bien qu’installé à partir de NuGet Package Manager n’était pas correctement installé dans le projet.

J’ai réussi à le réparer en exécutant la commande suivante sur la console du gestionnaire de packages :

 PM> Install-Package EntityFramework 

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

Vous n’avez pas besoin d’installer Entity Framework dans votre application Console, il vous suffit d’append une référence à l’assembly EntityFramework.SqlServer.dll. Vous pouvez copier cet assembly à partir du projet Class Library qui utilise Entity Framework dans un dossier LIB et y append une référence.

En résumé:

  • Application de bibliothèque de classes:
    • Installer Entity Framework
    • Écrivez votre code de couche de données
    • Le fichier app.config a toute la configuration liée à Entity Framework, à l’exception de la chaîne de connexion.
  • Créez une application console, Web ou de bureau:
    • Ajoutez une référence au premier projet.
    • Ajoutez une référence à EntityFramework.SqlServer.dll.
    • app.config / web.config a la chaîne de connexion (rappelez-vous que le nom de l’entrée de configuration doit être identique au nom de la classe DbContext).

J’espère que ça aide.

Vous pouvez également voir ce message si vous oubliez d’ inclure “EntityFramework.SqlServer.dll”.

Il semble être un fichier nouvellement ajouté dans EF6. Au départ, je ne l’avais pas inclus dans mon module de fusion et j’ai rencontré le problème répertorié ici.

Lorsque vous installez Entity Framework 6 via Nuget . EntityFramework.SqlServer manque parfois pour un autre exécutable. Ajoutez simplement le package Nuget à ce projet.

Parfois, ci-dessus ne fonctionne pas pour le projet de test

Pour résoudre ce problème dans Test Project, placez cette méthode dans Test Project:

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

Cette méthode n’a jamais été appelée, mais en tant que mes observations, le compilateur supprimera tous les assemblys “inutiles” et sans utiliser le EntityFramework.SqlServer , le test échoue.

Au lieu d’append EntityFramework.SqlServer à l’hôte du projet, vous pouvez vous assurer que cette référence est statique depuis votre projet Model / entity

 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"); } 

Cela fera en sorte que le processus de génération inclue l’assembly avec le projet hôte.

Plus d’infos sur mon blog http://andersmalmgren.com/2014/08/20/implicit-dependencies-and-copy-local-fails-to-copy/

Ajouter cette fonction

 private void FixEfProviderServicesProblem() 

à la classe de contexte de firebase database dans la classe de bibliothèque et la DLL manquante EntityFramework.SqlServer.dll sera copiée aux endroits appropriés.

 namespace abc { using System.Data.Entity; public partial class WorkflowDBContext : DbContext { public WorkflowDBContext() : base("name=WorkflowDBConnStr") { } public virtual DbSet WorkflowDefinitions { get; set; } public virtual DbSet WorkflowInstances { get; set; } public virtual DbSet EngineAlerts { get; set; } public virtual DbSet AsyncWaitItems { get; set; } public virtual DbSet TaskItems { get; set; } public virtual DbSet 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; } } } 

.

Aucun d’entre eux n’a fonctionné pour moi. J’ai trouvé la solution dans une autre question de stackoverflow . Je vais l’append ici pour référence facile:

Vous devez faire une référence, elle sera donc copiée dans le chemin d’application. Parce que plus tard, il sera référencé lors de l’exécution. Vous n’avez donc pas besoin de copier de fichiers.

 private volatile Type _dependency; public MyClass() { _dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices); } 

J’ai eu la même erreur en utilisant Entity Framework 6 avec SQL Server Compact 4.0. L’article sur MSDN pour les fournisseurs Entity Framework pour EF6 était utile. L’exécution des commandes de fournisseur respectives en tant que packages nuget sur la console du gestionnaire de packages peut résoudre le problème, car les packages NuGet appendont automatiquement des enregistrements au fichier de configuration. J’ai exécuté PM> Install-Package EntityFramework.SqlServerCompact pour résoudre le problème.

Lorsque l’erreur se produit dans les projets de test, la plus belle solution consiste à décorer la classe de test avec:

 [DeploymentItem("EntityFramework.SqlServer.dll")] 

Abordez ce problème aujourd’hui lorsque vous travaillez avec un ensemble de services Web, chacun dans différents projets, et un projet distinct contenant des tests d’intégration pour certains de ces services.

J’utilise cette configuration depuis un certain temps avec EF5, sans avoir besoin d’inclure des références à EF provenant du projet de test d’intégration.

Maintenant, après la mise à niveau vers EF6, il semble que je doive également inclure une référence à EF6 dans le projet de test d’intégration, même s’il n’est pas utilisé là-bas (comme indiqué plus haut par user3004275 ).

Indications que vous faites face au même problème:

  • Les appels directs à EF (connexion à une firebase database, obtention de données, etc.) fonctionnent correctement, à condition qu’ils soient initiés à partir d’un projet ayant des références à EF6.
  • Les appels au service via une interface de service publiée fonctionnent correctement. c’est-à-dire qu’il n’y a pas de références manquantes “en interne” dans le service.
  • Les appels directs aux méthodes publiques du projet de service, à partir d’un projet en dehors du service, provoqueront cette erreur, même si EF n’est pas utilisé dans ce projet lui-même; seulement en interne dans le projet appelé

Le troisième point est ce qui m’a décontenancé pendant un moment, et je ne sais toujours pas pourquoi cela est nécessaire. L’ajout d’une référence à EF6 dans mon projet de test d’intégration l’a résolu dans tous les cas …

Je viens de rencontrer ce problème aujourd’hui. J’ai une bibliothèque de classes de référentiel de données avec le package EF63 NuGet et une application console pour les tests, qui ne font référence qu’au projet de bibliothèque de classes. J’ai créé une commande de post-construction très simple, qui copie EntityFramework.SqlServer.dll du dossier Bin \ Debug de la bibliothèque de classes pour consolider le dossier Bin \ Debug de l’application et résoudre le problème. N’oubliez pas d’append la section entityFramework au fichier .config de l’application console.

La suppression du dossier BIN l’a fait pour moi

Ajoutez ci-dessous à votre app.config.

            

Vous devez forcer une référence statique à l’assembly EntityFramework.SqlServer.dll , mais au lieu de mettre un code factice, vous pouvez le faire d’une manière plus belle:

  1. Si vous avez déjà une classe DbConfiguration :

     public class MyConfiguration : DbConfiguration { public MyConfiguration() { this.SetProviderServices(System.Data.Entity.SqlServer.SqlProviderServices.ProviderInvariantName, System.Data.Entity.SqlServer.SqlProviderServices.Instance); } } 
  2. Si vous n’avez pas de classe DbConfiguration , vous devez mettre le code suivant au démarrage de l’application (avant que EF soit utilisé):

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

Je viens de réinstaller Entity Framework en utilisant Nuget. Et suivez les instructions écrites sur le lien ci-dessous: http://robsneuron.blogspot.in/2013/11/entity-framework-upgrade-to-6.html

Je pense que le problème sera résolu.

Aussi, assurez-vous que votre projet de démarrage est le projet qui contient votre dbcontext (ou application.config pertinente). Le mien essayait de lancer un projet de site Web qui ne comportait pas tous les parameters de configuration nécessaires.

J’ai essayé presque tout ce qui précède et rien n’a fonctionné.

Ce n’est que lorsque j’ai défini les DLL référencées dans les propriétés EntityFramework et EntityFramework.SqlServer projet par défaut que Copy Local to True a commencé à fonctionner!

tout le monde j’ai besoin de votre attention que deux dll EntityFramework.dll et EntityFramework.SqlServer.dll sont DataAccess layer Library Et il n’est pas logique de les utiliser en vue ou tout autre layer.it résout votre problème, mais ce n’est pas logique.

la manière logique est que l’atsortingbut enitiess les supprime et les remplace par l’API Fluent.

J’avais une application console et une bibliothèque de classes. Dans la bibliothèque de classes, j’ai créé Entity Data Model (clic droit sur Bibliothèque de classes> Ajouter> Nouvel élément> Données> ADO.NET Entity Data Model 6.0) et insérer la référence dans l’application console. Ainsi, vous avez une application console qui fait référence à la bibliothèque de classes et à la bibliothèque de classes que vous avez le modèle EF. J’ai eu la même erreur quand j’ai essayé d’obtenir des enregistrements de la table.

J’ai résolu ce problème en procédant comme suit:

  1. Faites un clic droit sur la solution et choisissez l’option «Gérer les packages NuGet pour la solution» et la fenêtre du gestionnaire de packages NuGet apparaîtra.
  2. Accédez à l’option «Gérer» sous la rubrique «Paquets installés». CONSEIL: Entity Framework est ajouté à la bibliothèque de classes. Vous aurez donc EntityFramework sous «Paquets installés» et vous verrez «Gérer» les options.
  3. Cliquez sur l’option «Gérer» et cochez la case pour installer le package dans le projet qui fait référence à la bibliothèque de classes qui contient le modèle EF (dans mon cas, cochez la case pour installer le package sur la console).

C’est tout ce que j’avais à faire et tout fonctionnait parfaitement.

J’espère que ça a aidé.

J’ai également eu un problème similaire. Mon problème a été résolu en procédant comme suit:

entrer la description de l'image ici

entrer la description de l'image ici

J’ai la même erreur. C’est étrange que cela ne se produise que lorsque j’utilise mon dbContext pour interroger l’un de mes modèles ou obtenir sa liste comme suit:

 var results = _dbContext.MyModel.ToList(); 

Nous avons essayé de réinstaller Entity Framework, de le référencer correctement, mais en vain.

Heureusement, nous avons essayé de vérifier Nuget pour ALL solutions, puis de tout mettre à jour ou de nous assurer everything la version est la même car nous avons remarqué que les deux projets ont des versions EF différentes sur le projet Web. Et il fonctionne. L’erreur est partie.

Voici la capture d’écran sur la gestion de Nuget pour toutes les solutions:

entrer la description de l'image ici

Le projet de démarrage qui référence le projet dans lequel Entity Framework est utilisé nécessite les deux assemblys suivants dans son dossier bin:

  • EntityFramework.dll
  • EntityFramework.SqlServer.dll

L’ajout d’un

au du fichier .config sur le projet de démarrage rend le premier assembly disponible dans ce répertoire bin. Vous pouvez copier ceci à partir du fichier .config de votre projet Entity Framework:

   

Pour rendre le second fichier .dll disponible dans le dossier bin, bien que cela ne soit pas pratique, une copie manuelle du dossier bin du projet Entity Framework peut être effectuée. Une meilleure alternative consiste à append aux lignes suivantes du projet Entity Framework, ce qui automatisera le processus:

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

J’avais un problème lié lors de la migration d’une firebase database CE vers SQL Server sur Azure. Juste perdu 4 heures à essayer de résoudre ce problème. J’espère que cela sauvera quelqu’un un destin similaire. Pour moi, j’avais une référence à SqlCE dans mon fichier packages.config. Sa suppression a résolu tout mon problème et m’a permis d’utiliser les migrations. Yay Microsoft pour une autre technologie avec des problèmes de configuration et de configuration inutilement complexes.

J’ai eu le même problème, il suffit de copier le fichier App Config du projet qui contenait DBContext dans mon projet de test

J’ai eu l’exception identique jeté. J’ai inclus

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

et tout recommence à travailler.

Comme le message montre que nous devons append le fournisseur System.Data.SqlClient, nous devons installer le paquet nuget d’EntityFramework qui a deux DLL, mais si nous développons uniquement une application console, il suffit d’append une référence à EntityFramework.SqlServer.dll.

Remarque: J’ai rencontré ce problème lors de la génération de SQL firebase database à partir de Model. Il avait bien créé toutes les tables mais n’exportait pas les modifications. Ce que vous devez noter, c’est que cette erreur est générée lorsque vous essayez d’exporter le fichier SQL en utilisant le modèle de génération DDL en tant que SSDLtoSQL10. Il attend la connexion MySQL ici, alors assurez-vous de sélectionner dans le menu déroulant DDL Generation Template SSDLtoMySQL sur les propriétés du modèle. J’ai passé une journée entière à ce sujet!

Dans mon cas, tout fonctionnait correctement puis s’est arrêté soudainement parce que je pense que Resharper a modifié certains changements à l’origine du problème. Mon projet a été divisé en couche de données, service et couche de présentation. J’ai installé et référencé Entity Framework dans ma couche de données, mais l’erreur ne s’est pas encore dissipée. La désinstallation et la réinstallation ne fonctionnaient pas non plus. Enfin, je l’ai résolu en transformant la couche de données en projet de démarrage, en effectuant la migration, en mettant à jour la firebase database et en remplaçant le projet de démarrage par la couche de présentation .

Développez le fichier YourModel.edmx et ouvrez la classe YourModel.Context.cs sous YourModel.Context.tt.

J’ai ajouté la ligne suivante dans la section using et l’erreur a été corrigée pour moi.

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

Vous devrez peut-être append cette ligne au fichier chaque fois que le fichier est généré automatiquement.