web-dev-qa-db-fra.com

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

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

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.

enter image description here

487
Fernando Vellozo

Je viens tout juste d'avoir le même problème et il semble qu'EntityFramework soit installé à partir de NuGet Package Manager mais qu'il n'était pas installé correctement dans le projet.

J'ai réussi à résoudre ce problème en exécutant la commande suivante sur Console du gestionnaire de package :

PM> Install-Package EntityFramework
532
douglaslps

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

359
Clément Picou

Vous n'avez pas besoin d'installer Entity Framework dans votre application console, il vous suffit d'ajouter une référence à Assembly EntityFramework.SqlServer.dll. Vous pouvez copier cet assembly à partir du projet de bibliothèque de classes qui utilise Entity Framework dans un dossier LIB et y ajouter 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 contient toutes les configurations liées à 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 à celui de la classe DbContext. 

J'espère que ça aide.

194

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

Il semble que ce soit un fichier nouvellement ajouté dans EF6. Au début, je ne l'avais pas inclus dans mon module de fusion et je rencontrais le problème répertorié ici.

109
Mike

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

Parfois ci-dessus ne fonctionne pas pour Test Project

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 comme mes observations le compilateur supprimera tous les assemblages "inutiles" et sans utiliser le code EntityFramework.SqlServer, le test échoue. 

45
Umar Abbas

Au lieu d’ajouter EntityFramework.SqlServer au projet hôte, vous pouvez lui assurer une référence statique à partir de votre projet Modèle/entité comme ceci. 

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 construction inclue l'assembly avec le projet hôte. 

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

44
Anders

Ajouter cette fonction 

private void FixEfProviderServicesProblem()

dans la classe de bibliothèque et le DLL EntityFramework.SqlServer.dll manquant sera copié aux emplacements appropriés.

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

Aucun de ceux-ci n'a fonctionné pour moi. J'ai trouvé la solution dans une autre question de stackoverflow . Je vais l'ajouter ici pour référence facile:

Vous devez faire une référence, elle sera donc copiée dans l'application den chemin. Parce que plus tard il sera référencé au runtime. Donc, vous ne le faites pas. besoin de copier tous les fichiers.

private volatile Type _dependency;

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

J'ai eu la même erreur lors de l'utilisation d'Entity Framework 6 avec SQL Server Compact 4.0. L'article sur MSDN pour Entity Framework Providers for EF6 était utile. L'exécution des commandes du fournisseur respectif en tant que packages de nuget sur la console de Package Manager peut résoudre le problème, car les packages de NuGet ajouteront automatiquement des enregistrements au fichier de configuration. J'ai exécuté PM> Install-Package EntityFramework.SqlServerCompact pour résoudre le problème.

8
MaySara

Lorsque l'erreur survient dans les projets de test, la solution la plus jolie est de décorer la classe de test avec:

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

Nous avons rencontré ce problème aujourd'hui lorsque nous travaillions avec un ensemble de services Web, chacun dans des projets différents, et un projet séparé 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 dans le projet de test d'intégration. 

Maintenant, après la mise à niveau vers EF6, il me semble nécessaire d’inclure également une référence à EF6 dans le projet de test d’intégration, même si elle n’est pas utilisée ici (à peu près comme indiqué plus haut par user3004275 ).

Indications que vous êtes confronté au même problème:

  • Les appels directs vers EF (connexion à une base de données, obtention de données, etc.) fonctionnent correctement tant qu'ils sont initiés à partir d'un projet comportant 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 directement aux méthodes publiques dans le projet de service, à partir d'un projet hors du service, généreront cette erreur, même si EF n'est pas utilisé dans ce projet lui-même. uniquement en interne dans le projet appelé 

Le troisième point est ce qui m'a mis hors tension pendant un moment, et je ne comprends 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 ... 

4
Kjartan

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 post-build très simple, qui copie EntityFramework.SqlServer.dll du dossier Bin\Debug de la bibliothèque de classes dans le dossier Bin\Debug de l'application console et le problème résolu. N'oubliez pas d'ajouter la section entityFramework au fichier .config de l'application console.

4
Ondřej

Ajoutez ci-dessous à votre app.config.

 <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

La suppression du dossier BIN l'a fait pour moi

3
David

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

  1. Si vous avez déjà un DbConfiguration class:

    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 class, vous devez insérer le code suivant au démarrage de l'application (avant que EF ne soit utilisé):

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

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- à-6.html

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

2
Kuntal Ghosh

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

 enter image description here

 enter image description here

2
BehrouzMoslem

Le projet de démarrage qui référence le projet où Entity Framework est utilisé a besoin des deux assemblys suivants dans son dossier bin:

  • EntityFramework.dll
  • EntityFramework.SqlServer.dll

L'ajout d'un <section> au <configSections> du fichier .config dans le projet de démarrage rend le premier assemblage disponible dans ce répertoire bin. Vous pouvez le copier à partir du fichier .config de votre projet Entity Framework:

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

Pour rendre le deuxième fichier .dll disponible dans le dossier bin, bien que cela ne soit pas pratique, une copie manuelle à partir du dossier bin du projet Entity Framework peut être effectuée ... Une meilleure alternative consiste à ajouter aux événements post-génération de l'entité Projet de structure les lignes suivantes, qui automatiseront le processus:

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

J'avais une application console et une bibliothèque de classes. Dans la bibliothèque de classes, j'ai créé Entity Data Model (cliquez avec le bouton droit de la souris sur Bibliothèque de classes> Ajouter> Nouvel élément> Données> ADO.NET Entity Data Model 6.0) et mettez la référence à l'intérieur de l'application console. Donc, vous avez une application console qui a une référence à la bibliothèque de classes et à l'intérieur de la bibliothèque de classes, vous avez un modèle EF. J'ai eu la même erreur lorsque j'ai essayé d'obtenir des enregistrements de la table. 

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

  1. Cliquez avec le bouton droit de la souris 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. Allez à l'option 'Gérer' sous 'Paquets installés' CONSEIL: Entity Framework est ajouté à la bibliothèque de classes. Vous aurez donc EntityFramework sous 'Paquets installés' et vous verrez l'option 'Gérer'.
  3. Cliquez sur l'option 'Gérer' et cochez pour installer le paquet sur le projet qui a une référence à la bibliothèque de classes qui contient le modèle EF (dans mon cas, cochez la case pour installer le paquet sur l'application console qui avait une référence à la bibliothèque de classes contenant le modèle EF)

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

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

1
dkkd

Assurez-vous également que votre projet de démarrage est le projet contenant votre dbcontext (ou le fichier app.config approprié). Le mien essayait de démarrer un projet de site Web qui n'avait pas tous les paramètres de configuration nécessaires.

1
user2588362

J'ai la même erreur. C’est bizarre que cela ne se produise que lorsque j’utilisais dbContext pour interroger l’un de mes modèles ou pour obtenir sa liste, par exemple:

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 rechercher des solutions ALL dans le Nuget, puis de tout mettre à jour ou de nous assurer que la version everything était identique car nous avions constaté que les deux projets avaient des versions EF différentes sur le projet Web. Et il fonctionne. L'erreur est partie.

Voici la capture d'écran sur la façon de gérer Nuget pour toutes les solutions:

 enter image description here

1
Willy David Jr

tout le monde, j’ai besoin de votre attention que deux dll EntityFramework.dll et EntityFramework.SqlServer.dll appartiennent à la bibliothèque de couches DataAccess. Il n’est pas logique de les utiliser en vue ou de tout autre couche.it résout votre problème mais ce n’est pas logique.

La manière logique est que l'attribut enitiess supprime et les remplace par une API Fluent. C'est une solution réelle

1
Vahid Akbari

il semble que personne ne mentionne d'abord de vérifier si System.Data.SqlClient est installé dans le système et s'il y est fait référence.

j'ai résolu mon problème en installant System.Data.SqlClient et en ajoutant un nouveau fournisseur dans app.Config.

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

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 de projet EntityFramework et EntityFramework.SqlServer par défaut Copy Local à True que tout a commencé!

1
SharpC

Comme le message indique que nous devons ajouter le fournisseur System.Data.SqlClient, nous devons installer le paquet nuget d’EntityFramework contenant deux dll, mais si nous développons uniquement une application console, nous devons simplement ajouter une référence à EntityFramework.SqlServer.dll

0
Sandeep Shekhawat

Remarque: j'ai rencontré ce problème lors de la génération de la base de données SQL à 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 SQL avec le modèle de génération DDL en tant que SSDLtoSQL10. MySQL attend ici la connexion. Assurez-vous donc de sélectionner le modèle de génération DDL SSDLtoMySQL dans les propriétés du modèle. J'ai passé une journée entière à ça!

0
Excalibur2000

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

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

et tout est de retour pour travailler à nouveau .. 

0
kneerunjun

Dans mon cas, tout fonctionnait correctement puis a été arrêté subitement parce que je pense que Resharper a modifié certains changements à l'origine du problème. Mon projet était divisé en couche de données, service et couche de présentation. Entity Framework était installé et référencé dans ma couche de données, mais l'erreur n'a pas disparu. Désinstaller et réinstaller ne fonctionnait pas non plus. Enfin, je l'ai résolu en transformant la couche de données en projet de démarrage, en effectuant une migration, en mettant à jour la base de données et en remettant le projet de démarrage sur ma couche de présentation.

0
Alf Moh

J'ai eu le même problème, je viens de copier le fichier de configuration d'application du projet contenant le DBContext dans mon projet de test 

0
stephen ebichondo

J'ai eu un problème connexe lors de la migration d'une base de données CE vers SQL Server sur Azure. J'ai juste perdu 4 heures à essayer de résoudre ce problème. Espérons que cela sauvera un destin similaire à quelqu'un. Pour moi, j'avais une référence à SqlCE dans mon fichier packages.config. Le supprimer 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. 

0
user2662643

Il vous manque juste une référence à EntityFramework.SqlServer.dll. Pour les projets EntityFramework utilisant SQL Server, les deux fichiers à référencer sont EntityFramework.SqlServer.dll et EntityFramework.dll

0
user2956314

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.

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

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

0
user2347528

Installez simplement le package EntityFramework sur votre projet Web/console. Cela devrait ajouter la section à votre fichier de configuration.

0
Vijaya Malla