Le type de fournisseur Entity Framework n'a pas pu être chargé?

420

J'essaie d'exécuter mes tests sur TeamCity qui est actuellement installé sur ma machine.

System.InvalidOperationException:

Le type de fournisseur Entity Framework ' System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'pour le' System.Data.SqlClient'fournisseur ADO.NET n'a pas pu être chargé. Assurez-vous que l'assembly du fournisseur est disponible pour l'application en cours d'exécution.

Voir http://go.microsoft.com/fwlink/?LinkId=260882 pour plus d'informations.

Je n'ai aucune référence à System.Data.Entityaucun de mes projets comme cela a été suggéré sur codeplex pour la mise à niveau vers EF6.

Donc, je ne sais pas pourquoi je reçois cette exception. Je ne reçois aucune exception de ce type lorsque j'exécute les tests à partir de VS.

J'ai essayé de mettre CopyLocal sur false puis de nouveau sur true .. mais cela ne semble pas fonctionner non plus.

Mise à jour

Mon app.config a les éléments suivants. Est-ce que cela provoque un comportement que je ne comprends pas?

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>
</configuration>

J'obtiens le stacktrace suivant dans teamcity.

[MSTest] IntegrationTests.CrudTest+QuestionTest.Create
[03:59:11][IntegrationTests.CrudTest+QuestionTest.Create] Initialization method IntegrationTests.CrudTest+QuestionTest.Initialize threw exception. System.InvalidOperationException: System.InvalidOperationException: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 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..
[03:59:11]
[IntegrationTests.CrudTest+QuestionTest.Create]     at System.Data.Entity.Config.ProviderServicesFactory.GetInstance(String providerTypeName, String providerInvariantName)
   at System.Data.Entity.Config.ProviderServicesFactory.GetInstanceByConvention(String providerInvariantName)
   at System.Data.Entity.Config.DefaultProviderServicesResolver.GetService(Type type, Object key)
   at System.Data.Entity.Config.CachingDependencyResolver.<>c__DisplayClass1.<GetService>b__0(Tuple`2 k)
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   at System.Data.Entity.Config.CachingDependencyResolver.GetService(Type type, Object key)
   at System.Data.Entity.Config.ResolverChain.<>c__DisplayClass3.<GetService>b__0(IDbDependencyResolver r)
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   at System.Data.Entity.Config.ResolverChain.GetService(Type type, Object key)
   at System.Data.Entity.Config.RootDependencyResolver.GetService(Type type, Object key)
   at System.Data.Entity.Config.ResolverChain.<>c__DisplayClass3.<GetService>b__0(IDbDependencyResolver r)
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   at System.Data.Entity.Config.ResolverChain.GetService(Type type, Object key)
   at System.Data.Entity.Config.CompositeResolver`2.GetService(Type type, Object key)
   at System.Data.Entity.Config.IDbDependencyResolverExtensions.GetService[T](IDbDependencyResolver resolver, Object key)
   at System.Data.Entity.Config.InternalConfiguration.GetService[TService](Object key)
   at System.Data.Entity.Config.DbConfiguration.GetService[TService](Object key)
   at System.Data.Entity.Utilities.DbProviderFactoryExtensions.GetProviderServices(DbProviderFactory factory)
   at System.Data.Entity.Infrastructure.DefaultManifestTokenService.GetProviderManifestToken(DbConnection connection)
   at System.Data.Entity.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest)
   at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
   at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext)
   at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input)
   at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
   at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
   at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
   at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
   at System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName)
   at System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity)
   at System.Data.Entity.DbSet`1.Add(TEntity entity)
   at EFRepository.Infrastructure.EFRepository`1.Add(T item) in c:\TeamCity\buildAgent\work\da2ea4e72c0e77f0\Repository\Infrastructure\EFRepository.cs:line 22
   at IntegrationTests.CrudTest.Initialize() in c:\TeamCity\buildAgent\work\da2ea4e72c0e77f0\IntegrationTests\CrudTest.cs:line 34
ashutosh raina
la source
1
EntityFramework.SqlServer.dll est-il déployé avec EntityFramework.dll? Dans EF6 SqlServer et SqlServerCE, les fournisseurs ne sont pas dans le même assemblage que le moteur EF comme c'était le cas avec les versions précédentes. Vous ne devez pas ajouter une référence à System.Data.Entity.dll. Le modèle de fournisseur dans EF6 a changé par rapport à EF5 et le fournisseur EF5 ne fonctionnera tout simplement pas. De plus, vous pouvez rencontrer quelques problèmes délicats (comme les types géospatiaux EF5 traités comme des types d'entités dans EF6)
Pawel
Oui, j'ai vérifié deux fois qu'il n'y a aucune référence à System.Data.Entity et les références à la fois à EntityFramework.dll et EntityFramework.SqlServer.dll sont présentes. Encore une fois, le projet compile et teste en VS. Ce n'est que lorsque les tests sont exécutés sur TeamCity que l'erreur se produit.
ashutosh raina
Il s'agit d'une configuration correcte. Je n'ai pas utilisé TeamCity mais il me semble que lorsque votre application est déployée pour exécuter les tests avec TeamCity, EntityFramework.SqlServer.dll est manquant et donc l'exception.
Pawel
1
voir la réponse de cet article: stackoverflow.com/questions/21175713/… J'ai ajouté la private volatile Type _dependency...réponse et cela a fonctionné! Ça pue juste que je dois ajouter une classe séparée comme celle-ci juste pour que EF fonctionne dans TeamCity.
a11smiles
2
J'ai désinstallé EntityFramework des paquets nuget et réinstallé et il a été corrigé
abhyudayasrinet

Réponses:

426

Même problème, mais j'ai installé EF 6 via Nuget. EntityFramework.SqlServer était manquant pour un autre exécutable. J'ai simplement ajouté le paquet nuget à ce projet.

Zapacila
la source
108
Je l'ai remarqué aussi. Si vous créez une bibliothèque qui utilise EF, VS placera EF.dll et EF.SqlServer.dll dans ce dossier de génération. Mais si vous avez maintenant un autre programme qui utilise votre bibliothèque, seul l'EF.dll sera placé dans ce dossier de compilation. EF.SqlServer.dll est manquant. Si vous l'ajoutez manuellement au dossier de génération, le programme fonctionne. Pas une bonne solution en soi, mais montre que le problème est que l'EF.SQLServer.dll manquant est la cause de l'erreur.
Eric
44
J'ai ajouté var x = typeof (System.Data.Entity.SqlServer.SqlProviderServices); Ensuite, mon application a fonctionné
Brian
33
Je m'inquiète toujours quand je tape du code qui ne fait absolument rien et tout à coup mon projet s'exécute. O_o
Jordan
10
En outre, en raison de l'optimisation du compilateur, vous voudrez peut-être également le faire x.ToString()ou il supprimera les typeofs dans la version.
Jordan
15
Je trouve ennuyeux qu'EF 6.1 ait maintenant besoin qu'EF soit installé sur ma DLL / Projet ASPX, alors qu'EF 5.0 n'en avait besoin que sur ma DLL / Projet de couche de données.
PeterX
274

J'ai eu le même problème dans mes projets de test - j'ai installé les derniers bits EF6 via NuGet et chaque fois que j'appelle quelque chose lié à EF, j'ai eu:

Le type de fournisseur Entity Framework 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' pour le fournisseur ADO.NET 'System.Data.SqlClient' n'a pas pu être chargé. Assurez-vous que l'assembly du fournisseur est disponible pour l'application en cours d'exécution. Voir http://go.microsoft.com/fwlink/?LinkId=260882 pour plus d'informations.

Ma solution: j'ai placé cette méthode dans mon projet de test:

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

Cette méthode n'a jamais été appelée, mais je pense que le compilateur supprimera tous les assemblys "inutiles" et sans utiliser le truc EntityFramework.SqlServer, le test échoue.

Quoi qu'il en soit: Fonctionne sur ma machine;)

Remarque: Au lieu d'ajouter la méthode pour tester le projet, vous pouvez garantir une référence statique à SqlProviderServices à partir de votre projet de modèle / entité .

Robert Muehsig
la source
24
J'ai fini par faire de même. Je voudrais parler à cette personne qui a fait de cet assemblage une dépendance à l'ouverture d'une connexion à db. Dans leur univers alternatif, tous nos projets frontaux qui ont un fichier de configuration avec une chaîne de connexion doivent faire référence à EntityFramework juste pour que cette dll ouvre la connexion. En quoi cela a-t-il un sens que je ne comprends pas.
juhan_h
3
C'est un hack, mais c'est la solution la meilleure / la plus simple que j'ai trouvée pour le scénario dans lequel vous n'avez pas de package de déploiement créé pour votre projet.
Kon
3
Pour vous tous en utilisant d'autres suggestions comme "var x = typeof (SqlProviderServices);". Seule cette solution apportée par Robert fonctionne sur le développement et la construction de machines !!!
Alexander Schmidt
3
Merci Robert, c'est ridicule de la part de l'équipe EF, mais de toute façon ça marche pour moi.
Hitesh
7
Pour être clair: l'ajout du code ci-dessus à votre DbContextclasse résoudra le problème dans EF 6.1. De cette façon, vous n'avez pas besoin d'inclure le package Entity Framework Nuget dans votre projet frontal (WebApi, etc.) et pouvez laisser tout ce qui concerne l'EF dans votre couche de données.
Nick
106

Nuget configurera votre projet EF6 pour référencer EntityFramework.SqlServer.dll. Cela se déploie dans le dossier de sortie de votre projet EF6 pendant la génération, mais il ne se déploiera pas dans le dossier de sortie pour les projets référençant votre projet EF6. Je pense que c'est parce que Visual Studio est suffisamment "intelligent" pour détecter que rien dans votre assembly n'utilise réellement la DLL et ne l'inclut donc pas. Vous pouvez forcer EntityFramework.SqlServer.dll à être déployé dans le dossier de sortie des projets référençant votre projet EF6 (tests unitaires, interfaces utilisateur, etc.) en ajoutant du code à votre projet EF6 qui utilise EntityFramework.SqlServer.dll. Attention à ne pas mettre le code dans une classe générée car vous risquez de le perdre lors de la prochaine régénération. J'ai choisi d'ajouter la classe suivante à l'assembly, ce qui a résolu le problème.

using System.Data.Entity.SqlServer;

internal static class MissingDllHack
{
    // Must reference a type in EntityFramework.SqlServer.dll so that this dll will be
    // included in the output folder of referencing projects without requiring a direct 
    // dependency on Entity Framework. See http://stackoverflow.com/a/22315164/1141360.
    private static SqlProviderServices instance = SqlProviderServices.Instance;
}
Timothy Schoonover
la source
1
Cela a résolu le problème pour moi en ce qui concerne MSTest. J'aime cette méthode car elle n'exige pas que je fasse quoi que ce soit de mal avec l'héritage de classe sur mes classes de test. Il suffit d'inclure la classe quelque part dans l'assemblage de test et MAGIC. Merci!
kbrimington
Exactement, c'est la raison pour laquelle il ne copie pas sqlserver.dll dans la sortie des projets de référence. Cela se produit lorsque vous disposez d'une couche supplémentaire entre l'exécution de l'application et l'assemblage de contexte. Merci, cela a résolu mon problème.
Bharat
2
Pour ceux qui ne veulent pas passer 4 secondes à le rechercher: using System.Data.Entity.SqlServer;
TTT
Nous utilisons une classe de base commune pour les tests unitaires, tous les tests unitaires héritent de cette classe. L'ajout de cette méthode à cette classe signifie que tous les projets avec une classe de test unitaire héritant de la classe de base fonctionnent correctement.
MaxJ
3
Petit point, mais il est probablement préférable d'ajouter un commentaire à cette classe pour expliquer pourquoi c'est nécessaire.
John Darvill
43

Ma solution était de supprimer le framework d'entité du projet via le gestionnaire de pépites et de le rajouter.

Kevbo
la source
9
PM> Update-Package -Reinstall "EntityFramework" -ProjectName "MyProj1"
VahidN
Cela a fonctionné pour moi, et je pense que cela pourrait être la solution optimale
ccoutinho
Solution simple et propre qui fonctionne. Devrait être beaucoup plus élevé sur la liste
mode777
29

J'ai résolu ce problème en ajoutant un stament à l'aide de ma classe DBContext, comme ceci:

using SqlProviderServices= System.Data.Entity.SqlServer.SqlProviderServices;
mmttato
la source
1
Il s'agit de la solution la plus propre à ce problème. Je vous remercie.
Alexandru Dicu
Cette solution fonctionne et semble propre. Question: ne perdrons-nous pas l'ID de ligne que la classe DBContext est actualisée? c'est-à-dire en utilisant la génération de classe edmx?
NoloMokgosi
Je ne peux pas croire que cela était nécessaire et que Microsoft ne l'ait en quelque sorte pas corrigé - mais cela a fonctionné pour moi. Merci pour une solution simple.
Tsar Bomba
Cette solution est fonctionnellement la même que MissingDllHack . Cela peut sembler plus propre, mais introduit du code de contournement dans votre classe de contexte. Ce code sera également signalé pour suppression par des outils comme ReSharper et pourrait facilement être perdu au fil du temps. Une bonne solution, mais je préfère garder la solution de contournement séparée du contexte d'une manière qui ne génère pas d'avertissement de code.
Timothy Schoonover du
20

J'ai utilisé l'enregistrement basé sur le code pour le fournisseur. link1 lien2

Je viens de créer la classe de configuration comme

class DbContextConfiguration : DbConfiguration
{
    public DbContextConfiguration()
    {
        this.SetDatabaseInitializer(new DropCreateDatabaseAlways<MyDbContext>());
        this.SetProviderServices(SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);
    }
}

Le point clé est le suivant : SetProviderServices (SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);

et l'ai utilisé de cette manière

[DbConfigurationType(typeof(DbContextConfiguration))]
public class MyDbContext : DbContext
{
    public MyDbContext()
    {
        ...
    }

    public DbSet<...> ...{ get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        ...
    }
}
vkuschenko
la source
J'ai deux projets dans une solution. Le premier est la bibliothèque de classes avec l'assembly de structure d'entité et la classe DbContext et les fichiers tt. Le deuxième projet concerne les formulaires Windows qui devraient obtenir des données à l'aide du projet ef. @Nash: Pourriez-vous préciser où (dans quel projet) vous avez placé votre classe DbContextConfiguration? Merci
surfmuggle
Comme mentionné ci-dessus, il semble que des références supplémentaires soient un moyen de résoudre ce problème (voir le commentaire d'eric). J'ai utilisé la console nuget et tiré cette commande: Get-Project MyWinformsProject | Install-Package EntityFrameworkqui l'a corrigée pour moi. Je voudrais quand même mieux comprendre la raison.
surfmuggle
DbContextConfiguration semblait déjà être présent (par rapport à 2013), l'ajout de la ligne DbConfiguraton au-dessus de ma classe MyDbContext n'a pas résolu le problème pour moi.
Anders Lindén
Vous n'avez pas besoin d'une classe DbConfiguration . Mettez le code suivant au démarrage de l' application (avant EF est utilisé): DbConfiguration.Loaded += (sender, e) => e.ReplaceService<DbProviderServices>((s, k) => System.Data.Entity.SqlServer.SqlProviderServices.Instance);.
Rosberg Linhares
14

Je l'ai trié avec [DeploymentItem] sur ma classe d'initialisation d'assembly

namespace MyTests
{
    /// <summary>
    /// Summary description for AssemblyTestInit
    /// </summary>
    [TestClass]
    [DeploymentItem("EntityFramework.SqlServer.dll")]
    public class AssemblyTestInit
    {
        public AssemblyTestInit()
        {
        }

        private TestContext testContextInstance;

        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        [AssemblyInitialize()]
        public static void DbContextInitialize(TestContext testContext)
        {
            Database.SetInitializer<TestContext>(new TestContextInitializer());
        }
    }
}
Aléatoire
la source
9

Tard dans la soirée, mais les réponses les plus votées me semblaient toutes des hacks.

Tout ce que j'ai fait a été de supprimer ce qui suit de mon app.config dans le projet de test. Travaillé.

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
Jeriley
la source
La vraie solution!
Ben F
8

J'ai un problème, car je n'ajoute pas de référence à EntityFramework.sqlServer.dll. Quand je développe un programme, ça marche. Mais lorsque je publie une application et que je l'installe, cela génère une erreur.

J'ajoute simplement une référence et je crée et publie à nouveau.

Références

Matej
la source
J'ai fait celui-ci et ça a marché. Fondamentalement, le projet affichera un avertissement lorsque les composants des bibliothèques ne sont pas référés correctement.
kbvishnu
5

J'ai résolu ce problème en copiant manuellement le EntityFramework.SqlServer.dllfichier dans l' bin folderapplication principale.

Sreeja Sj
la source
4

J'ai finalement résolu cela. Il s'avère que j'ai eu une implémentation erronée d'IDIsposable dans ma classe de référentiel. J'ai corrigé ça. L'implémentation erronée a provoqué une exception de stackoverflow car je ne disposais pas correctement des ressources. Cela a empêché VS d'exécuter les tests et le moteur d'exécution des tests s'est bloqué.

Je l'ai déposé ici auprès de Microsoft (c'était avant d'avoir la bonne solution). connect.microsoft.com/VisualStudio/feedback/details/775868/vs-test-execution-crashes-in-vs-2012#details

Quoi qu'il en soit, les versions fonctionnent désormais correctement sur teamcity. Bien que je reste curieux de savoir pourquoi ni le moteur d'exécution de VS Test n'avait une manière gracieuse de me dire ce qui se passait, pas Team City.

J'ai découvert la cause profonde en déboguant manuellement le test (ce que j'ai réalisé seulement après tant de jours, le correctif m'a pris 5 secondes).

J'espère que cela aidera quelqu'un qui rencontre de tels problèmes.

ashutosh raina
la source
4

Je vois un problème similaire, et en utilisant la méthode de ce post: ( http://entityframework.codeplex.com/workitem/1590 ), ce qui résout mon problème.

Pour contourner le problème, vous pouvez faire en sorte que votre assembly de test référence directement l'assembly du fournisseur en ajoutant une ligne comme celle-ci n'importe où dans l'assembly de test: var _ = System.Data.Entity.SqlServer.SqlProviderServices.Instance;

Innovation Wang
la source
3

Lorsque j'ai inspecté le problème, j'ai remarqué que la DLL suivante manquait dans le dossier de sortie. La solution simple consiste à copier Entityframework.dll et Entityframework.sqlserver.dll avec app.config dans le dossier de sortie si l'application est en mode débogage. En même temps, changez le paramètre d'option de construction "Copier dans le dossier de sortie" de app.config pour copier toujours. Cela résoudra votre problème.

Thusitha Jayawickrama
la source
2
J'ai mis en place "Copy Local" vrai pour "EntityFramework.SqlServer" uniquement. Maintenant ça marche.
Alezis
3

Il suffit de référencer ou de parcourir la DLL EF - EntityFramework.SqlServer.dll

yogihosting
la source
C'est ce que j'ai fait. Copié la référence à "EntityFramework.SqlServer" de ma bibliothèque dans le projet "en cours d'exécution". Ça a marché!
Håkon K. Olafsen
3

J'ai eu le même problème que j'ai essayé plusieurs fois, mais cela n'a pas été résolu, mais lorsque j'ai installé le package EntityFramework.SqlServerCompact, il a résolu d'installer ce package à partir du gestionnaire de packages Nuget.

Install-Package EntityFramework.SqlServerCompact
Alishan
la source
3

J'ai créé un fichier "de démarrage" statique et ajouté le code pour forcer la DLL à être copiée dans le dossier bin comme un moyen de séparer cette "configuration".


[DbConfigurationType(typeof(DbContextConfiguration))] public static class Startup { }

public class DbContextConfiguration : DbConfiguration
{
    public DbContextConfiguration()
    {
        // This is needed to force the EntityFramework.SqlServer DLL to be copied to the bin folder
        SetProviderServices(SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);
    }
}

hatsrumandcode
la source
1
Merci! Ce fut une énorme aide.
Addison Schuhardt
1
Heureux que vous ayez trouvé ma réponse utile @AddisonSchuhardt :)
hatsrumandcode
2

Je ne voulais pas de référence à EF dans mon projet d'application (ou pour copier quoi que ce soit manuellement), j'ai donc ajouté ceci aux événements post-construction de mon projet EF:

cp $(TargetDir)EntityFramework.SqlServer.dll $(SolutionDir){your-main-bin-folder}
patrickbadley
la source
2

Cela ne se produit que dans mes projets de test de charge / unité. Frustrant, je l'ai fait surgir dans un projet que je mène depuis 2 ans. Ça a dû être un ordre de test qui brise les choses. Je suppose qu'une fois que fi est retiré, il est parti.

J'ai trouvé que le simple fait de déclarer une variable qui utilise la valeur correcte résout le problème ... Je n'ai même jamais appelé la méthode. Il suffit de le définir. Bizarre mais ça marche.

    /// <summary>
    /// So that the test runner copies dlls not directly referenced by the integration project
    /// </summary>
    private void referenceLibs()
    {
        var useless = SqlProviderServices.Instance;
    }
hal9000
la source
2

Après avoir essayé toutes les autres solutions suggérées et n'ayant pas réussi à faire fonctionner mon projet, j'ai finalement trouvé un petit commentaire sur cette page :

La suppression du dossier BIN l'a fait pour moi

Et ça a marché pour moi aussi.

Ulysses Alves
la source
1
Je fusionnais 2 succursales - mon projet n'a eu aucun changement lié à EF, mais mes tests ont commencé à échouer sans raison. La suppression du dossier BIN les a fait fonctionner à nouveau.
Arno Peters
@ Zeek2, cette erreur est délicate. Il existe de nombreuses suggestions différentes pour résoudre ce problème dans la page que j'ai citée. Ce n'est là qu'une des nombreuses solutions possibles. Continuez à le rechercher jusqu'à ce que vous trouviez la solution qui s'appliquera à votre problème particulier, et bonne chance.
Ulysses Alves
1

L'ajout d'Entityframework.dll et Entityframework.sqlserver.dll au projet de référence a résolu le problème.

Nish
la source
1

J'ai vérifié la fenêtre de sortie de débogage dans le projet de test unitaire. EntityFramework.SqlServer.dll n'a pas été chargé. Après l'avoir ajouté au dossier bin, les tests ont été exécutés avec succès.

yW0K5o
la source
1

J'ai aussi eu 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
1

J'ai eu le même problème avec l'instanciation DBContextd'un objet d'un projet de test unitaire. J'ai vérifié mes packages de projet de test unitaire et je me suis dit queEntityFramework package n'était pas installé, j'ai installé cela à partir de Nuget et le problème a été résolu (je pense que c'est le bug EF).

codage heureux

Code_Worm
la source
0

Je viens d'avoir le même message d'erreur.

J'ai un projet distinct pour mon accès aux données. L'exécution locale du projet Web (qui faisait référence au projet de données) a très bien fonctionné localement. Mais lorsque j'ai déployé le projet Web pour azurer l'assembly: EntityFramework.SqlServer n'a pas été copié. Je viens d'ajouter la référence au projet web et de redéployer, maintenant ça marche.

j'espère que cela aide les autres

pastrami01
la source
0

Je travaillais sur le didacticiel de l'Université Contoso hors ligne et j'ai rencontré le même problème lors de la tentative de création de mon premier contrôleur à l'aide d'EF. J'ai dû utiliser la console du gestionnaire de packages pour charger EF à partir du cache de nuget et créé une chaîne de connexion à mon instance locale de SQL Server, mon point ici est que mon paramètre webConfig pour EF peut ne pas être défini comme vous tous, mais j'ai pu résoudre mon problème en supprimant complètement la section "fournisseurs" dans "entityFramework"

Robert

Robert K
la source
0

Il existe une solution simple. ouvrez les références dans votre projet, faites un clic droit sur "System.Data" -> propriétés. Remplacez "Copier local" par "Vrai".

Le problème devrait être résolu.

ChinaHelloWorld
la source
0

Dans mon cas, j'ai résolu le problème en installant SQL Server 2012 Developer Edition alors que j'avais précédemment installé SQL Server Express 2012 (x64). Il semble que cela m'a fourni la dépendance manquante.

Farrukh Najmi
la source
0

supprimer le framework d'entité du projet via nuget puis l'ajouter à nouveau.

Griffo
la source
0

Dans mon cas dlln'a pas été copié bien que j'y ai ajouté une référence. C'est parce que EntityFramework.SqlServer.dlln'est pas copié dans votre projet. Ajoutez cette DLL et cela fonctionnera, espérons-le. Vous pouvez la trouver dans le projet où vous avez ajouté le modèle de données.

Baqer Naqvi
la source
0

En plus de toutes les suggestions utiles ici, si vous utilisez EF 6.1.3, assurez-vous que la version .net de votre projet est de 4,5 ou plus.

Mauricio Atanache
la source