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

543

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.

entrez la description de l'image ici

Fernando Vellozo
la source
J'utilise EF5 sans les trucs providerset provider, alors pensez à le supprimer?
ta.speot.is
1
mettez une copie de votre chaîne de connexion ici
pylover
La chaîne de connexion est dans l'image (App.confing), soit dit en passant est très simple, j'appelle le constructeur public BaseStorage(): base ("RaptorDB") {},, BaseStorage () hérite de DbContext dans EF5 tout fonctionnait parfaitement, pas déjà dans EF6.
Fernando Vellozo
10
Le problème sera résolu en installant EF6, le deuxième projet (console), merci à tous ceux qui ont aidé de quelque manière que ce soit!
Fernando Vellozo
3
Pour moi, cela semblait être dû au fait que Visual Studio ne réalisait pas que l'assembly EntityFramework.SqlServer était réellement utilisé par le projet de base. Si vous faites quelque chose comme la réponse de @ Carra , vous n'avez pas besoin d'ajouter EF à chaque projet qui fait référence à votre projet de base - beaucoup plus propre.
tehDorf

Réponses:

608

Je viens de rencontrer 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
douglaslps
la source
34
PMC a écrit que `` EntityFramework 6.0.1 '' était déjà installé, mais l'a ajouté à mon application console (qui n'utilise PAS EF), mais cela a aussi fait l'affaire pour moi. Je supprime EF des références d'application de console, les retours d'erreur, je ne comprends pas - mon application de console utilise le projet de référentiel (qui utilise EF) Merci pour l'aide!
Prokurors
33
N'oubliez pas d'ajouter -ProjectName <ProjectName> à la ligne de commande si vous avez plusieurs projets dans votre solution ... !!!
Eugenio Miró
1
En utilisant l' -Preoption, indiquez à nuget d'installer les packages préliminaires. Je ne recommande pas de l'utiliser. J'ai une erreur similaire mais la solution était d'installer simplement EntityFramework dans le projet hôte. Je l'ai installé dans une bibliothèque de classe mais pas dans le projet principal (web / console / ou autre),
Davide Icardi
10
Même problème ici. J'avais un projet qui n'avait pas de référence à EF mais la dll EF était dans le dossier Debug. L'exécution de cette commande sur ce projet a été ajoutée EntityFramework.SqlServer.dllau dossier Debug - problème résolu.
qujck
4
Dans ma situation, cette erreur ne s'est pas présentée tant que je n'ai pas déployé le projet sur notre serveur de test. En effet, c'est EntityFramework.SqlServer.dll qui manquait et l'installation d'EF via le gestionnaire de packages a fonctionné. Il vient d'ajouter les deux références pertinentes au projet, puis a ajouté les paramètres entityFramework au web.config. Je suppose que l'IIS local a pu source l'assembly localement, mais l'IIS complet sur le serveur Web n'a pas pu en raison des autorisations?
Atters
384

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

Clément Picou
la source
248
C'est une réponse absolument ridicule. Pourquoi diable aurais-je besoin de faire ça? Et vous savez ce qui est encore plus ridicule? Ça marche.
Robert
19
Voir ma réponse ci-dessous, vous n'avez pas besoin d'installer EF dans votre application console.
Francisco Goldenstein
7
Votre réponse est correcte. Ajoutez uniquement la référence EntityFramework.SqlServer.dll au projet frontal qui utilise une bibliothèque avec EF, corrigez le problème.
N'utilisez
31
Vous n'avez pas besoin d' ajouter une référence à EF dans la console / l'application Web. Il vous suffit de vous assurer qu'il EntityFramework.SqlServer.dllest copié dans le répertoire bin. L'ajout d'une référence forte peut casser votre architecture (si vous avez créé plusieurs niveaux, votre assembly d'exécution de niveau supérieur ne devrait même pas connaître EF). Au lieu de cela, vous pouvez vous assurer que le fournisseur SQL Server est copié. Voir par exemple stackoverflow.com/a/19130718/870604
ken2k
3
Je soupçonne que la raison pour laquelle EntityFramework.SqlServer.dll n'est pas détecté en tant que dépendance est que Entity Framework le charge dynamiquement. Comment votre projet est-il censé savoir pour copier sur le fournisseur SQL lorsque la seule référence à celui-ci se trouve dans le fichier de configuration?
Joel McBeth
209

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 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 a toute la configuration liée à Entity Framework, à l'exception de la chaîne de connexion.
  • Créez une console, une application 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 le même que le nom de la classe DbContext.

J'espère que ça aide.

Francisco Goldenstein
la source
18
Bonne réponse. PAS besoin d'installer EF. EntityFramework.SqlServer.dll.
Tom Stickel
15
Je suis d'accord. C'est complètement la bonne réponse. Référencez une DLL de 1/2 mb ou tirez le projet EF nuget qui est> 5,5 mb. Réduit également un peu la valeur de l'architecture multi-niveaux. Pauvre émission de MS vraiment: j'ai 4 niveaux et mon niveau supérieur ne devrait vraiment avoir aucune raison de savoir quoi que ce soit sur EF
72GM
18
Toujours aussi ridicule. Par exemple, pourquoi un frontal aurait-il besoin d'une référence à SqlServer? La partie avant s'en fichait, dans mon cas. Mais ça marche. +1
Mike de Klerk
2
C'était utile. Merci beaucoup.
peter_the_oak
1
Cela ne rendra-t-il pas difficile la mise à jour des versions d'EntityFramework? Vous devez vous rappeler d'aller mettre à jour la référence à la DLL
écraser
114

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

Il semble s'agir 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 répertorié ici.

Mike
la source
7
J'ai rencontré ce problème lorsque j'avais auparavant un projet (a) avec une référence à un projet (b) qui avait une référence à EF. Après avoir nettoyé et supprimé le dossier bin du projet (a), puis reconstruit, la référence EF est apparue, mais pas EF.SqlServer.dll. Copier cela en manuel a fonctionné pour moi
dan richardson
2
@dan richardson merci d'avoir mentionné 'supprimer le dossier bin'.
Rajshekar Reddy
J'ai eu l'erreur en essayant d'exécuter un script LINQPad après une mise à niveau EF6. Même référencer EntityFramework.SqlServer.dll dans LINQPad ne l'a pas corrigé JUSQU'à ce que je reconstruise ma solution dans VS2013. La nouvelle référence s'est ensuite résolue correctement dans LINQPad et mon script s'est exécuté!
Chris
Dans mon cas, j'étais ok à l'environnement de développement, mais quand j'ai publié apparaît le problème référencé. Après avoir comparé la liste des bibliothèques en dev avec le dossier bin du serveur, j'ai remarqué l'absence d'EntityFramework.SqlServer.dll, je viens de le télécharger et de rafraîchir l'application, et le tour est joué.
Henry Rodriguez
C'était le problème pour moi, merci! Voir la solution propre de @Anders pour éviter les problèmes en oubliant d'inclure la DLL dans chaque projet requis.
SharpC
54

Au lieu d'ajouter EntityFramework.SqlServer au projet hôte, vous pouvez lui garantir une référence statique à partir de votre projet Model / entity comme celui-ci

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 que le processus de construction inclura 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/

Anders
la source
5
Je pense que c'est une bonne solution propre où nous n'avons pas à inclure des références aux DLL liées à la persistance dans les projets qui devraient être indépendants de la persistance.
JTech
3
D'accord, et cela s'applique à toute bibliothèque avec des dépendances implicites, pas seulement de la persistance
Anders
3
Lorsque vous avez une dépendance explicite sur un type dans un assembly, elle sera copiée par le processus de génération. Cependant, ici, vous n'avez pas de dépendance explicite et le processus de génération ne parviendra pas à copier l'assembly dans le dossier de génération. Mon code s'assure juste qu'il existe une référence explicite à n'importe quel type dans ledit assemblage.
Anders
2
Sans lui, il n'y a pas de dépendance explicite à l'assembly de votre code et il ne sera pas copié en sortie
Anders
2
C'est génial.
Kris
48

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

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

Pour résoudre ce problème dans Test Project, placez simplement 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 les EntityFramework.SqlServeréléments, le test échoue.

Umar Abbas
la source
2
Eh bien, ce n'est pas joli, mais cela a résolu le problème que j'avais dans mon projet de test. Aucune des autres solutions n'a fonctionné.
Honorable Chow
Dans mon cas, il suffisait d'ajouter également Entity Framework à mon projet de test dans "Gérer les paquets Nuget pour la solution"
Juha Palomäki
vous devez réellement mettre dans n'importe quel projet (pas seulement un test) pour être assuré que System.Data.Entity.SqlServer sera inclus dans "results lib set" après la compilation (note: Unity ou un autre outil IoC pourrait changer cette règle et vous besoin d'appeler ce code à partir du projet de test).
Roman Pokrovskij
C'est en fait la meilleure solution, car vous n'avez pas besoin de pulvériser les références du cadre d'entité partout dans votre projet.
Daniel Lobo
Cela m'a orienté dans la bonne direction. Le EntityFramework.SqlServerest ajouté à votre bibliothèque de classes, mais s'il n'est pas utilisé, il ne sera pas placé dans le dossier de sortie de votre application. J'ai résolu le problème en ajoutant un ExecutionStrategy, ce que je devais encore faire, donc l'ajout d'une ligne comme SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());dans une DbConfigurationclasse a résolu le problème.
janvier
24

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

.

Johannes
la source
désolé d'essayer de le révoquer ... car je ne pensais pas que cela fonctionnerait ... et c'est le cas! ... il dit que je ne peux pas changer mon vote, à moins que la réponse ne soit modifiée, car cela fait trop longtemps et a depuis été verrouillé ...
Seabizkit
Cela a également fonctionné pour moi. Nous avons un projet de bibliothèque qui utilise EF 6 et une application console qui utilise la bibliothèque. Nous obtenions la même exception que le PO. Nous ne souhaitons pas placer la configuration spécifique à EntityFramework dans le fichier de configuration de l'application, cette méthode a donc fonctionné pour nous. Merci
Rob
1
Où appelez-vous, FixEfProviderServicesProblemj'ai essayé dans le constructeur, sans succès.
Francis Ducharme
1
Je ne l'appelle jamais - pas besoin. Le fait qu'il existe fait que .net pense que c'est nécessaire et inclut EntityFramwork comme dépendance.
Johannes
Probablement sur stackoverflow.com/a/19130718/1467396 ? Mais +1, de toute façon pour la clarté de comment / où l'utiliser.
David
20

Rien de tout cela 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 le chemin de l'application den. 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);
}
Carra
la source
2
Cette! Pas besoin d'ajouter une référence à d'autres projets qui pourraient référencer cet assemblage.
tehDorf
8

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 les fournisseurs Entity Framework pour EF6 a été utile. L'exécution des commandes de fournisseur respectives en tant que packages de nuget dans la console du gestionnaire de packages peut résoudre le problème, car les packages NuGet ajouteront automatiquement des enregistrements au fichier de configuration. J'ai couru PM> Install-Package EntityFramework.SqlServerCompactpour résoudre le problème.

MaySara
la source
2
Je suis vraiment étonné que personne n'ait voté pour l'instant! Le message d'erreur indique clairement: la raison de l'erreur est qu'après la mise à niveau d'EF, il n'y a vraiment plus de définition de fournisseur pour SQL Compact dans le fichier web.config de l'application! L'ajout du package que vous mentionnez corrige le fichier web.config et le fournisseur sera défini.
Csaba Toth
1
simplement sauveur de vie. Il doit être marqué comme réponse car il fournit clairement une solution au problème
ZafarYousafi
7

Ran dans ce problème aujourd'hui lorsque vous travaillez avec un ensemble de services Web, chacun dans des projets différents, 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 à partir 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'y est pas utilisé (à peu près comme indiqué ci-dessus par user3004275 ).

Les indications que vous rencontrez le même problème:

  • Les appels directement à EF (connexion à une base de données, obtention de données, etc.) fonctionnent correctement, tant qu'ils sont lancés à partir d'un projet qui fait référence à EF6.
  • Appels au service via une interface de service publiée fonctionnent correctement; c'est-à-dire qu'il n'y a aucune référence manquante "en interne" dans le service.
  • Les appels directement aux méthodes publiques dans le 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; uniquement en interne dans le projet appelé

Le troisième point est ce qui m'a ébranlé pendant un certain temps, 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 ...

Kjartan
la source
7

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

[DeploymentItem("EntityFramework.SqlServer.dll")]
Alberto Juan
la source
C'est joli, mais génère plus de travail et est plus facile à oublier. Avec l'astuce "référence forcée", il vous suffit de le faire sur le ou les projets qui ont vraiment besoin d'utiliser EF.
Charles Roberto Canato
7

Le projet de démarrage qui fait référence au projet dans lequel 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>fichier .config sur le projet de démarrage rend le premier assembly 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 du dossier bin du projet Entity Framework peut être effectuée. Une meilleure alternative consiste à ajouter aux événements post-génération du projet Entity Framework 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\
Leonel B.
la source
2
Merci, j'ai un framework Entity dans une couche de données, donc il est isolé, mais il est regrettable que Microsoft ne nous permette pas d'isoler véritablement la couche de données et nous fasse polluer le ux avec une technologie de base de données. J'espérais que je n'aurais pas à faire ça.
Matt
4

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-construction 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 a été résolu. N'oubliez pas d'ajouter la section entityFramework au fichier .config de l'application console.

Ondřej
la source
4

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>
Taran
la source
Vous devez également l'enregistrer sur <configSections>-<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
TryingToImprove
C'est ce que fait "IInstall-Package EntityFramework". Ce n'est pas vraiment nécessaire car EntityFramework tente par défaut de charger EntityFramework.SqlServer.dll pour le nom invariant SqlClient. Cette méthode peut être utilisée pour remplacer le fournisseur.
user1295211
3

La suppression du dossier BIN l'a fait pour moi

David
la source
3

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 d'utiliser EF):

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

Je viens de réinstaller Entity Framework à l'aide de 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.

Kuntal Ghosh
la source
Une explication serait bien! Pourquoi vous devez le réinstaller et ainsi de suite
Rizier123
1
Parce que pour des raisons inconnues, les changements ne prendront pas effet et j'ai donc réinstallé EntityFramework 6.1.1 et après cela, il prend effet.
Kuntal Ghosh
2

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.

user2347528
la source
2

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

entrez la description de l'image ici

entrez la description de l'image ici

BehrouzMoslem
la source
2

il semble que personne n'ait mentionné en premier lieu si System.Data.SqlClient est installé dans le système et si une référence y est faite.

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"/>
Tobi Owolawi
la source
1

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

user2588362
la source
1

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

Seulement quand je mets les DLL référencés dans le projet par défaut EntityFrameworket EntityFramework.SqlServerpropriétés Copy Localà Trueat - il commencé à travailler!

SharpC
la source
1

tout le monde, j'ai besoin de votre attention que deux dll EntityFramework.dll et EntityFramework.SqlServer.dll sont la bibliothèque de couches DataAccess 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'attribut enitiess les supprime et les remplace par Fluent API. c'est la vraie solution

Vahid Akbari
la source
1

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 Class Library> Ajouter> Nouvel élément> Données> ADO.NET Entity Data Model 6.0) et j'ai mis la référence dans l'application console. Donc, vous avez une application console qui fait 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 suivant ces étapes:

  1. Cliquez avec le bouton 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. Allez dans l'option «Gérer» sous «Packages installés» CONSEIL: Entity Framework est ajouté à la bibliothèque de classes, vous aurez donc EntityFramework sous «Packages installés» et vous verrez l'option «Gérer»
  3. Cliquez sur l'option 'Gérer' et cochez 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, je coche la case pour installer le package dans l'application console qui faisait référence à la bibliothèque de classes qui avait le modèle EF à l'intérieur)

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

J'espère que cela a aidé.

dkkd
la source
1

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

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 les ALLsolutions du Nuget , puis de tout mettre à jour ou de nous assurereverything s'agit de la même version car nous avons remarqué que les deux projets ont des versions EF différentes sur le projet Web. Et il fonctionne. L'erreur a disparu.

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

entrez la description de l'image ici

Willy David Jr
la source
1

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

user2956314
la source
0

J'ai rencontré un problème lié lors de la migration d'une base de données CE vers Sql Server sur Azure. Je viens de perdre 4 heures à essayer de résoudre ce problème. Espérons que cela puisse sauver quelqu'un du même sort. 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. Oui Microsoft pour une autre technologie avec des problèmes de configuration et de configuration inutilement complexes.

user2662643
la source
0

J'ai eu le même problème, je viens de copier le fichier App Config du projet qui contenait le DBContext dans mon projet de test

Stephen Ebichondo
la source
0

J'ai eu l'exception identique levée. J'ai inclus

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

et tout recommence à fonctionner ..

kneerunjun
la source
0

Comme le message montre que nous devons ajouter le fournisseur System.Data.SqlClient, c'est pourquoi nous devons installer le package nuget d'EntityFramework qui a deux DLL, mais si nous développons uniquement une application console, nous devons simplement ajouter une référence à EntityFramework.SqlServer.dll

Sandeep Shekhawat
la source