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.Entity
aucun 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
la source
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.Réponses:
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.
la source
x.ToString()
ou il supprimera lestypeof
s dans la version.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:
Ma solution: j'ai placé cette méthode dans mon projet de test:
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é .
la source
DbContext
classe 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.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.
la source
Ma solution était de supprimer le framework d'entité du projet via le gestionnaire de pépites et de le rajouter.
la source
PM> Update-Package -Reinstall "EntityFramework" -ProjectName "MyProj1"
J'ai résolu ce problème en ajoutant un stament à l'aide de ma classe DBContext, comme ceci:
la source
J'ai utilisé l'enregistrement basé sur le code pour le fournisseur. link1 lien2
Je viens de créer la classe de configuration comme
Le point clé est le suivant : SetProviderServices (SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);
et l'ai utilisé de cette manière
la source
DbContextConfiguration
? MerciGet-Project MyWinformsProject | Install-Package EntityFramework
qui l'a corrigée pour moi. Je voudrais quand même mieux comprendre la raison.DbConfiguration.Loaded += (sender, e) => e.ReplaceService<DbProviderServices>((s, k) => System.Data.Entity.SqlServer.SqlProviderServices.Instance);
.Je l'ai trié avec [DeploymentItem] sur ma classe d'initialisation d'assembly
la source
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é.
la source
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.
la source
J'ai résolu ce problème en copiant manuellement le
EntityFramework.SqlServer.dll
fichier dans l'bin folder
application principale.la source
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.
la source
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;
la source
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.
la source
Il suffit de référencer ou de parcourir la DLL EF - EntityFramework.SqlServer.dll
la source
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.
la source
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 { }
la source
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:
la source
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.
la source
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 :
Et ça a marché pour moi aussi.
la source
L'ajout d'Entityframework.dll et Entityframework.sqlserver.dll au projet de référence a résolu le problème.
la source
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.
la source
J'ai aussi eu un problème similaire
Mon problème a été résolu en procédant comme suit:
la source
J'ai eu le même problème avec l'instanciation
DBContext
d'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
la source
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
la source
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
la source
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.
la source
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.
la source
supprimer le framework d'entité du projet via nuget puis l'ajouter à nouveau.
la source
Dans mon cas
dll
n'a pas été copié bien que j'y ai ajouté une référence. C'est parce queEntityFramework.SqlServer.dll
n'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.la source
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.
la source