Aucun fournisseur de cadre D'entité trouvé pour le ADO.NET fournisseur avec le système de nom invariant'.Données.SqlClient'

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

aucun fournisseur de cadre D'entité trouvé pour le ADO.NET fournisseur avec le système de nom invariant'.Données.SqlClient". Assurez-vous que le fournisseur est enregistré dans la section 'entitefram framework' du fichier de configuration de l'application. Voir http://go.microsoft.com/fwlink/?LinkId=260882 pour plus d'information.

enter image description here

464
demandé sur Dirk 2013-08-27 05:58:11

30 réponses

je viens d'avoir le même problème et il semble que Entitefram Framework bien que installé à partir de NuGet Gestionnaire de paquets n'a pas été correctement installé dans le projet.

j'ai réussi à le corriger en exécutant la commande suivante sur Package Manager Console :

PM> Install-Package EntityFramework
503
répondu douglaslps 2014-10-07 11:47:25

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

339
répondu Clément Picou 2018-03-07 13:26:41

vous n'avez pas besoin d'installer Entity Framework dans votre application Console, vous avez juste besoin d'ajouter une référence à l'assembleur Entitefram Framework.SqlServer.DLL. Vous pouvez copier cet assemblage à partir du projet de bibliothèque de classe qui utilise Entity Framework dans un dossier LIB et y ajouter une référence.

en résumé:

  • application de Bibliothèque de Classe:

    • Installer Entity Framework
    • écrivez votre code de couche de données
    • app.le fichier de configuration a toute la configuration liée au Framework Entity, à l'exception de la chaîne de connexion.
  • créer une application Console, web ou de bureau:

    • ajouter une référence au premier projet.
    • ajouter une référence à Entitefram Framework.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 le même que le nom de la classe DbContext.

j'espère que cela aide.

183
répondu Francisco Goldenstein 2014-07-23 20:16:58

vous pouvez également voir ce message si vous oubliez de inclure" Entitefram Framework.SqlServer.DLL."

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

105
répondu Mike 2014-03-24 19:58:50

lorsque vous installez Entity Framework 6 par Nuget . EntityFramework.SqlServer rate parfois un autre exécutable. Il suffit d'ajouter le paquet Nuget à ce projet.

parfois ci-dessus ne fonctionne pas pour le projet D'essai

pour résoudre ce problème dans le projet D'essai il suffit de placer cette méthode dans le projet D'essai:

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 va supprimer tous les assemblages " inutiles "et sans utiliser la substance EntityFramework.SqlServer le test échoue.

45
répondu Umar Abbas 2014-04-18 20:16:18

au lieu d'ajouter Entitefram Framework.SqlServer pour accueillir le projet, vous pouvez vous assurer un point de référence fixe à partir de votre Modèle/de l'entité projet de cette

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 rendra le processus de construction de l'assemblage 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 /

40
répondu Anders 2015-06-05 22:21:01

ajouter cette fonction

private void FixEfProviderServicesProblem()

à contexte de base de données de la classe dans la bibliothèque de la classe et les DLL manquantes EntityFramework.SqlServer.dll sera copié aux bons endroits.

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

.

20
répondu Johannes 2016-03-31 18:46:29

rien de tout cela ne marchait pour moi. J'ai trouvé la solution dans une autre question . Je l'ajouterai ici pour faciliter la consultation:

vous devez faire une référence, de sorte qu'il sera copié dans l'application den chemin. Parce que plus tard il sera référencé dans l'exécution. Si vous n'avez pas besoin de copier tous les fichiers.

private volatile Type _dependency;

public MyClass()
{
    _dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
}
17
répondu Carra 2017-05-23 12:18:27

j'ai eu la même erreur en utilisant Entity Framework 6 avec SQL Server Compact 4.0. L'article sur MSDN pour Entity Framework Providers pour EF6 a été utile. Exécuter les commandes des fournisseurs respectifs sous forme de paquets nuget à la Console du Gestionnaire de paquets pourrait résoudre le problème, tout comme les paquets NuGet ajouteront automatiquement des enregistrements au fichier de configuration. J'ai lancé PM> Install-Package EntityFramework.SqlServerCompact pour résoudre le problème.

8
répondu MaySara 2014-05-10 20:57:29

lorsque l'erreur se produit dans les projets de tests, la meilleure solution est de décorer la classe test avec:

[DeploymentItem("EntityFramework.SqlServer.dll")]
6
répondu Alberto Juan 2015-09-30 09:46:05

a rencontré ce problème aujourd'hui en travaillant 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 du projet de Test D'intégration.

maintenant, après la mise à niveau vers EF6, il semble que je doive inclure une référence à EF6 dans le projet de test d'intégration aussi, même bien qu'il ne soit pas utilisé ici (à peu près comme indiqué ci-dessus par user3004275 ).

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

  • appelle directement à EF (connexion à une base de données, obtention de données, etc.) fonctionne bien, à condition qu'ils soient lancés à partir d'un projet qui a des références à EF6.
  • appels au service via une interface de service publiée beau travail; i.e. il n'y a pas de références manquantes "en interne" dans le service.
  • Appels directement le public à des méthodes dans le projet de service, à partir d'un projet à l'extérieur du service, seront la cause de cette erreur, même si EF est pas utilisé dans le projet lui-même; à l'intérieur, dans le projet

le troisième point est ce qui m'a mis à l'écart pendant un certain temps, et je ne sais toujours pas pourquoi cela est nécessaire. L'ajout d'un ref à EF6 dans mon projet de test D'intégration l'a résolu dans tous les cas...

4
répondu Kjartan 2017-05-23 12:26:36

je viens de rencontrer ce problème aujourd'hui. J'ai la bibliothèque de classe de dépôt de données avec le paquet NuGet EF63 et l'application de console pour le test, qui ont la référence seulement au projet de bibliothèque de classe. J'ai créé une commande de post-construction très simple, qui copie Entitefram Framework.SqlServer.dll du dossier Bin\Debug de la bibliothèque de classe au dossier Bin\Debug de l'application de la console et Problème résolu. N'oubliez pas d'ajouter la section entitefram framework aux applications de la console .fichier de configuration.

4
répondu Ondřej 2015-03-26 12:40:55

supprimer le BIN-Folder fait pour moi

3
répondu David 2014-01-31 19:18:02

Ajouter ci-dessous à votre application.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
répondu Taran 2015-12-01 18:33:13

vous devez forcer une référence statique à la Entitefram Framework.SqlServer.dll assemblée, mais au lieu de mettre un code fictif, vous pouvez le faire d'une manière plus belle:

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

    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 à démarrage de l'application (avant L'utilisation de EF):

    static MyContext()
    {
        DbConfiguration.Loaded += (sender, e) =>
            e.ReplaceService<DbProviderServices>((s, k) => System.Data.Entity.SqlServer.SqlProviderServices.Instance);
    }
    
3
répondu Rosberg Linhares 2017-03-01 20:59:40

je viens de réinstaller le framework Entity 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.

2
répondu Kuntal Ghosh 2014-12-04 08:17:10

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

  • Entityfram Framework.dll
  • Entityfram Framework.SqlServer.dll

Ajout d'un <section> à la <configSections> de la .le fichier de configuration sur le projet de démarrage rend le premier assemblage disponible dans ce répertoire bin. Vous pouvez copier ce de la .fichier de configuration de votre projet-cadre D'entité:

<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 faire le second .dll disponible dans le dossier bin, bien que non pratique, une copie manuelle du dossier bin du projet Entity Framework peut être faite. Une meilleure alternative consiste à ajouter aux événements Post-construction du projet de cadre D'entité 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
répondu Leonel B. 2018-06-16 14:12:32

aussi, assurez-vous que votre projet de démarrage est le projet qui contient votre dbcontexte (ou application pertinente.config). Le mien essayait de démarrer un projet de site web qui n'avait pas tous les paramètres de configuration nécessaires.

1
répondu user2588362 2014-03-28 21:40:13

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

seulement quand j'ai défini les DLLs référencés dans le projet par défaut EntityFramework et EntityFramework.SqlServer propriétés Copy Local à True a-t-il commencé à fonctionner!

1
répondu SharpC 2016-05-27 12:21:06

j'ai besoin de votre Attention.dll et Entitefram Framework.SqlServer.dll sont la bibliothèque de la couche DataAccess et il n'est pas logique de les utiliser en vue ou tout autre couche.cela résout votre problème, mais ce n'est pas logique.

la logique veut que l'attribut enitiess les supprime et les remplace par L'API Fluent.c'est la vraie solution

1
répondu Vahid Akbari 2016-07-10 15:15:14

j'avais une application de console et une bibliothèque de classe. Dans la bibliothèque de classe j'ai créé le modèle de données D'entité (clic droit sur la bibliothèque de classe > Ajouter > Nouvel élément > données > ADO.NET entité Data Model 6.0) et placer la référence à l'intérieur de l'application console. Donc, vous avez l'application console qui a une référence à la bibliothèque de classe et à l'intérieur de la bibliothèque de classe vous avez le modèle EF. J'ai eu la même erreur quand j'ai essayé de faire quelques enregistrements de la table.

j'ai résolu ce problème en suivant ces étapes:

  1. clic droit sur la solution et choisissez l'option" Gérer les paquets NuGet pour la Solution " et la fenêtre du gestionnaire de paquets NuGet apparaîtra.
  2. passer à l'option "Gérer" sous "paquets installés" Astuce: Entity Framework est ajouté à la bibliothèque de classe, de sorte que vous aurez Entitefram Framework sous 'paquets installés' et vous verrez 'Manage'option' 151960920"
  3. cliquez sur l'option "Gérer" et vérifiez pour installer le paquet au projet qui a la référence à la bibliothèque de la classe qui détient le modèle EF (dans mon cas, j'ai mis case à cocher pour installer le paquet pour application console qui fait référence à la bibliothèque de la classe qui avait EF modèle à l'intérieur)

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

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

1
répondu dkkd 2016-11-04 18:29:45

j'ai aussi eu un problème similaire.Mon problème a été résolu en faisant ce qui suit:

enter image description here

enter image description here

1
répondu BehrouzMoslem 2017-10-12 15:07:45

j'ai la même erreur. C'est bizarre que ça n'arrive que chaque fois que j'utilise mon dbContext pour interroger un de mes modèles ou obtenir sa liste comme:

var results = _dbContext.MyModel.ToList();

nous avons essayé de réinstaller le cadre de L'entité, le référencer correctement mais en vain.

heureusement, nous avons essayé de vérifier le Nuget pour ALL solutions, puis tout mettre à jour ou s'assurer everything est la même version parce que nous avons remarqué que les deux projets a EF différent versions sur le projet Web. Et il fonctionne. L'erreur a disparu.

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

enter image description here

1
répondu Willy David Jr 2018-03-07 13:28:03

j'ai eu un problème lié lors de la migration d'un db CE vers un serveur Sql sur Azure. J'ai perdu 4 heures à essayer de résoudre ça. Espérons que cela puisse sauver quelqu'un d'un destin similaire. Pour moi, J'avais une référence à SqlCE dans mes paquets.fichier de configuration. Retrait il a résolu 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
répondu user2662643 2013-11-25 23:37:13

j'ai eu le même problème, j'ai juste copié le fichier de configuration de L'application du projet qui contenait le Dbcontexte à mon projet de test

0
répondu stephen ebichondo 2015-01-08 14:02:31

j'ai fait la même exception. J'ai inclus

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

et tout recommence à fonctionner ..

0
répondu kneerunjun 2015-03-21 13:37:30

comme message montre que nous devons ajouter le système de fournisseur.Données.SqlClient c'est pourquoi nous avons besoin d'installer le paquet nuget de Entitefram Framework qui a deux dll mais si nous développons seulement l'application console alors nous avons juste besoin d'ajouter la référence de Entitefram Framework.SqlServer.dll

0
répondu Sandeep Shekhawat 2015-08-28 05:32:44

Note: j'ai eu ce problème en générant La base de données Sql à partir du modèle. Il avait créé toutes les tables fine mais ne voulait pas exporter les changements. Ce que vous devez remarquer, c'est que cette erreur est générée lorsque vous essayez d'exporter le sql en utilisant le modèle de génération DDL comme SSDLtoSQL10. Il attend la connexion MySQL ici donc assurez-vous de sélectionner à partir du menu déroulant le modèle de génération DDL SSDLtoMySQL sur les propriétés du modèle. Passé une journée entière sur ce !

0
répondu Excalibur2000 2016-08-23 13:46:23

dans mon cas, tout fonctionnait correctement puis soudainement a cessé de fonctionner parce que je pense que Resharper a modifié certains changements qui ont causé le problème. Mon projet était divisé en la couche de données, la couche de service et la couche de présentation. J'avais Entity framework installé et référencé dans ma couche de données mais l'erreur n'a pas disparu. Désinstaller et réinstaller n'a pas fonctionné non plus. Enfin, je l'ai résolu en faisant de la couche de données le projet de démarrage, faisant de la migration, mettant à jour le base de données et modification du projet de démarrage retour à ma couche de présentation .

0
répondu Alf Moh 2017-05-23 04:29:04

Développez Votremodèle.fichier edmx et ouvrir YourModel.Cadre.classe cs sous votre modèle.Contexte.tt.

j'ai ajouté la ligne suivante dans la section et l'erreur a été corrigée pour moi.

utilisant Sqlprovidervices = System.Données.Entité.SqlServer.Sqlprovider services;

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

0
répondu user2347528 2017-06-01 14:38:27