ODP.NET géré – Impossible de trouver le fournisseur de données .Net Framework demandé

À l’aide de Visual Studio 2013, j’ai ajouté la dernière version de ODP.NET Gérée à un projet utilisant Nuget:

Install-Package odp.net.managed 

http://www.nuget.org/packages/odp.net.managed/121.1.2

Maintenant, quand j’essaye de lancer le code suivant:

 Database db = DatabaseFactory.CreateDatabase(); 

Il lève l’exception suivante:

 An exception of type 'System.ArgumentException' occurred in System.Data.dll but was not handled in user code Additional information: Unable to find the requested .Net Framework Data Provider. It may not be installed. 

Après avoir lu les problèmes similaires rencontrés par d’autres utilisateurs, j’ai ajouté la section Pilote géré à C: \ Windows \ Microsoft.Net \ Framework64 \ v4.0.30319 \ Config \ machine.config:

      

Mais cela n’a eu aucun effet.

J’ai la chaîne de connexion spécifiée en tant que telle dans mon fichier web.config, mais je ne suis pas sûr qu’il regarde même le format de la chaîne de connexion car il échoue avant d’ouvrir la connexion:

    

J’ai ajouté ce qui suit à ma configuration Web:

       

Je commencerais par faire un test direct et en évitant les méthodes d’usine:

 var conn = new Oracle.ManagedDataAccess.Client.OracleConnection("your connection ssortingng"); conn.Open(); 

Tous les problèmes ici seront soit liés au fichier Oracle.ManagedDataAccess.dll manquant dans le répertoire bin, soit à des problèmes de connectivité causés par la chaîne de connexion (en supposant que vous puissiez déjà vous connecter à l’instance Oracle via d’autres moyens).

En ce qui concerne l’usine, il semble que vous utilisiez un code de bibliothèque d’entreprise obsolète. Dans les versions ultérieures du cadre, je pense que vous utiliseriez:

 var factory = DbProviderFactories.GetFactory("ODP.NET, Managed Driver"); var conn = factory.CreateConnection(); 

Je pense que si vous avancez pas à pas, vous obtiendrez de meilleurs commentaires.

Je rencontrais cette erreur lors du déploiement d’une application ASP.NET MVC 5 utilisant EntityFramework 5 sur notre serveur 64 bits sur lequel la version 64 bits des composants clients ODAC était installée.

J’ai suivi les conseils de b_levitt et confirmé que la connexion pouvait être ouverte manuellement sans utiliser les usines. ODAC était donc installé et fonctionnait, mais les méthodes de l’usine ne permettaient pas de localiser les assemblages.

Après m’être tiré les cheveux pendant un laps de temps non divulgué, j’ai compris que le problème venait du fichier machine.config de la version 32 bits du framework .NET. Il n’incluait pas les entrées des fournisseurs Oracle. J’ai donc ajouté manuellement les entrées suivantes à ce fichier:

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ machine.config

Sous

   

assurez-vous de disposer des deux sections suivantes:

 

Vous pouvez obtenir les entrées exactes de votre fichier machine.config dans le dossier framework64.

Ensuite, sous

    

assurez-vous que vous avez les deux noms d’usine suivants:

    

Après avoir ajouté ces entrées, tout fonctionnait pour moi.

J’ai résolu le problème en changeant la configuration du pool d’applications IIS pour Enable 32-bit Application en FALSE .

J’obtenais l’exception. Failed to find or load the registered .Net Framework Data Provider car ODAC que j’ai installé est pour la version 64-bit et que mon pool d’applications faisait en sorte que l’application s’exécute en 32-bit .