Question Aucun fournisseur de cadre d'entité n'a été trouvé pour le fournisseur ADO.NET avec le nom invariable 'System.Data.SqlClient'


Après avoir téléchargé le fichier 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.

enter image description here


453
2017-08-27 01:58


origine


Réponses:


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 Console du gestionnaire de packages:

PM> Install-Package EntityFramework

483
2017-09-05 17:28



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


326
2017-11-18 10:24



Vous n'avez pas besoin d'installer Entity Framework dans votre application Console, il vous suffit d'ajouter une référence à l'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 ajouter une référence à celui-ci.

En résumé:

  • Application de bibliothèque de classes:
    • Installez Entity Framework
    • Écrivez votre code de couche de données
    • Le fichier app.config a toutes les configurations liées à Entity Framework à l'exception de la chaîne de connexion.
  • Créez une application Console, Web ou de bureau:
    • Ajouter 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 (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 ça aide.


180
2018-04-09 18:18



Vous pouvez également voir ce message si vous oubliez de 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 listé ici.


104
2017-11-04 21:04



Lorsque vous installez Entity Framework 6 via Nuget. EntityFramework.SqlServer manque parfois pour un autre exécutable. Ajoutez simplement le Nuget package à 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 assemblys "inutiles" et sans utiliser le EntityFramework.SqlServer le test échoue


45
2018-04-18 20:16



Au lieu d’ajouter 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-dependends-and-copy-local-fails-to-copy/


39
2018-04-20 09:17



Ajouter cette fonction

private void FixEfProviderServicesProblem()

à la classe de contexte de base de données dans la classe de bibliothèque et la DLL manquante EntityFramework.SqlServer.dll sera copiée aux emplacements corrects.

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

.


19
2018-03-16 13:16



Aucun d'entre eux 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   chemin. Parce que plus tard, il sera référencé lors de l'exécution. Donc vous ne le faites pas   besoin de copier des fichiers.

private volatile Type _dependency;

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

17
2018-04-14 12:20