4 votes

"Impossible de trouver le fournisseur de données .Net Framework demandé. Il se peut qu'il ne soit pas installé."

Je sais qu'il y a eu beaucoup d'autres publications sur cette erreur mais aucune n'a pu m'éclairer ou m'aider à résoudre mon problème. J'utilise une connexion directe à SqlExpress, donc pas de bases de données spéciales Oracle ou MySQL ou autre. Il me semble que cela devrait me convenir parfaitement.

Le scénario est donc le suivant : j'ai créé une solution composée d'une poignée de projets : référentiels, données (EF5.0), utilitaires, un projet de test et une application Web MVC. L'objectif est d'accéder simplement à une base de données SQL Express sous-jacente via les classes Data par le biais de référentiels dans le projet Repositories en utilisant EF5 et quelques référentiels du projet de test et de l'application MVC.

Le projet de test fonctionne et est capable d'accéder et de mettre à jour la base de données sans aucun problème.

Cependant, le projet Web MVC génère le message "Impossible de trouver le fournisseur de données .Net Framework demandé. Il se peut qu'il ne soit pas installé", ce que je ne comprends pas car il utilise la même chaîne de connexion que le projet de test.

[ArgumentException: Unable to find the requested .Net Framework Data Provider.  It may not be installed.]
   System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) +1426271
   WebMatrix.Data.DbProviderFactoryWrapper.CreateConnection(String connectionString) +64
   WebMatrix.Data.<>c__DisplayClass15.<OpenConnectionStringInternal>b__14() +16
   WebMatrix.Data.Database.get_Connection() +19
   WebMatrix.Data.Database.EnsureConnectionOpen() +12
   WebMatrix.Data.Database.QueryValue(String commandText, Object[] args) +63
   WebMatrix.WebData.DatabaseWrapper.QueryValue(String commandText, Object[] parameters) +14
   WebMatrix.WebData.SimpleMembershipProvider.GetUserId(IDatabase db, String userTableName, String userNameColumn, String userIdColumn, String userName) +232
   WebMatrix.WebData.SimpleMembershipProvider.ValidateUserTable() +85

J'ai...

  1. Enregistrer le System.Data.SqlClient dans le web.config.
  2. Vérifié que la version enregistrée (2.0.0.0) de System.Data existe dans le GAC par cet article
  3. Je me suis assuré qu'il n'y avait pas de fautes de frappe dans la chaîne de connexion.

Voici ce que j'ai dans le web.config ...

  <connectionStrings>
    <add name="DBCatalogContext" 
         connectionString="metadata=res://*/DBCatalog.csdl|
                                    res://*/DBCatalog.ssdl|
                                    res://*/DBCatalog.msl;
                                    provider=System.Data.SqlClient;
                                    provider connection string=&quot;data source=.\SQLEXPRESS;
                                                                     initial catalog=DBCatalog;
                                                                     integrated security=True;
                                                                     multipleactiveresultsets=True;
                                                                     App=EntityFramework&quot;" 
         providerName="System.Data.EntityClient" />
  </connectionStrings>

  <system.data>
    <DbProviderFactories>
      <add name="SqlClient Data Provider" 
           invariant="System.Data.SqlClient" 
           description=".Net Framework Data Provider for SqlServer" 
           type="System.Data.SqlClient.SqlClientFactory, 
                 System.Data, 
                 Version=2.0.0.0, 
                 Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    </DbProviderFactories>
  </system.data>

La seule chose que je vois qui n'a pas de sens pour moi, c'est que lorsque je sélectionne la référence "System.Data" dans le dossier "References" et que je regarde les propriétés, il est indiqué que c'est la version 4.0.0.0, mais lorsque je change la version dans la section "DbProviderFactories" du site de configuration, j'obtiens toujours l'erreur. De plus, je ne vois même pas la référence à cette bibliothèque dans le projet Test qui fonctionne.

Je suis persuadé qu'il s'agit d'un oubli ou qu'il me manque un paramètre de configuration, mais je ne sais pas où chercher à ce stade, et toute aide serait appréciée.

Merci, G

5voto

Gary O. Stenstrom Points 542

J'avais apparemment omis certaines informations finalement pertinentes lors de ma publication initiale. Il s'agissait notamment du fait que l'erreur était provoquée par les services d'adhésion, en particulier le ... SimpleMembershipInitializer ... à l'origine, cette classe spécifiait la chaîne de connexion ... "DefaultConnection" définie dans le web.config, à utiliser lors de l'initialisation de la connexion à la base de données.

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "Users", "UserId", "UserName", autoCreateTables: false);

Je l'avais modifié pour qu'il utilise la chaîne de connexion "DBCatalogContext" que j'avais ajoutée au web.config, pensant utiliser cette seule chaîne de connexion à la place. Le problème, bien sûr, est que la nouvelle chaîne de connexion que j'ai ajoutée était une chaîne de connexion Entity Framework que les services d'adhésion n'ont pas reconnue, ce qui a entraîné l'erreur du fournisseur de données.

J'ai simplement rajouté la chaîne de connexion originale, normale, en plus de la chaîne de connexion Entity Framework et maintenant tout fonctionne. Enfin, tout ce qui concerne ce question ...

<connectionStrings>
    <add name="DBCatalogContext" 
         connectionString="metadata=res://*/DBCatalog.csdl|
                                    res://*/DBCatalog.ssdl|
                                    res://*/DBCatalog.msl;
                                    provider=System.Data.SqlClient;
                                    provider connection string=&quot;data source=.\SQLEXPRESS;
                                                                     initial catalog=DBCatalog;
                                                                     integrated security=True;
                                                                     multipleactiveresultsets=True;
                                                                     App=EntityFramework&quot;" 
         providerName="System.Data.EntityClient" />

    <add name="DefaultConnection" 
         providerName="System.Data.SqlClient" 
         connectionString="data source=.\SQLEXPRESS;initial catalog=DBCatalog;integrated security=True;multipleactiveresultsets=True;App=EntityFramework" />

  </connectionStrings>

J'espère que quelqu'un d'autre pourra trouver cela utile.

0voto

GETah Points 10887

J'ai eu exactement les mêmes problèmes. Je fais ce qui suit : J'ai étendu le UserProfile pour avoir une nouvelle propriété, Email .

J'ai pensé que je devais aussi ajouter le Email à cet appel :

WebSecurity.InitializeDatabaseConnection("AgileBoardDB", "UserProfile", "UserId", "UserName", "Email", autoCreateTables: true);

Cela n'a jamais fonctionné, j'obtiens toujours "... Provider not found". J'ai tout essayé, sans succès.

Il s'avère que EF est assez intelligent et crée automatiquement le fichier Email J'ai donc supprimé la colonne supplémentaire Email paramètre de WebSecurity.InitializeDatabaseConnection et tout fonctionne bien maintenant.

PS : J'utilise la même chaîne de connexion EF pour me connecter à ma base de données.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X