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.
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
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).
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é:
J'espère que ça aide.
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.
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.
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/
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;
}
}
}
.
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);
}
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.
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")]
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:
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 ...
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.
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>
La suppression du dossier BIN l'a fait pour moi
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:
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);
}
}
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);
}
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.
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:
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\
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:
C'est tout ce que j'avais à faire et tout fonctionnait parfaitement.
J'espère que ça a aidé.
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.
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:
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
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"/>
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é!
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
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!
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 ..
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.
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
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.
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
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.
Installez simplement le package EntityFramework sur votre projet Web/console. Cela devrait ajouter la section à votre fichier de configuration.