web-dev-qa-db-fra.com

Le fournisseur ADO.NET 'Oracle.ManagedDataAccess.Client' n'est pas enregistré dans le fichier de configuration de la machine ou de l'application ou n'a pas pu être chargé.

J'utilise .NET4.5.1, MVC5, EF6, avec Oracle.ManagedDataAccess 4.121.1.0 et Oracle.ManagedDataAccess.EntityFramework 6.121.2.0

J'ai été en mesure de générer un modèle à partir d'une base de données existante (une partie de celle-ci ajoutant une table à la fois), la construction de l'application est parfaite.

Cependant, lorsque j'essaie d'exécuter une requête test pour voir si elle peut obtenir les données 

 public ActionResult Cancellations()
    {
        var factoryClasses = System.Data.Common.DbProviderFactories.GetFactoryClasses();
        using (var db = new Entities())
        {
            var cancelationStatuses = new[] {3, 7, 9};
           var result = db.TRANSACTIONDETAIL.Where(o => cancelationStatuses.Contains(o.TRANSACTIONSTATUSID));
           return View(result);
        }
    }

il échoue (sur var result = ...) avec Unable to find the requested .Net Framework Data Provider. It may not be installed.

_ { En essayant de chercher } _ DbProviderFactories en effet il n'y a rien dans la collection (var factoryClasses =).

Cependant j'ai installé 12c 4 (ODTwithODAC121024) } et 11g (ODTwithODAC1120320_32bit), et ai redémarré l'ordinateur. 

La base de données fonctionne sur 11g et je peux y accéder avec PL/SQL developerenter image description here

Web.config ressemble à:

<configuration>
<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" />
 <section name="Oracle.ManagedDataAccess.Client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</configSections>
.....
<connectionStrings>
.....
<add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=Oracle_user;Password=Oracle_user_password;Data Source=Oracle" />
 <add name="Entities" connectionString="metadata=res://*/OracleDb.csdl|res://*/OracleDb.ssdl|res://*/OracleDb.msl;provider=Oracle.ManagedDataAccess.Client;provider connection string='data source=******" providerName="System.Data.EntityClient" />           </connectionStrings>
......
<system.data>
<DbProviderFactories>
  <!-- Remove in case this is already defined in machine.config -->
  <add name="Oracle Data Provider for .NET" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
  <remove invariant="Oracle.ManagedDataAccess.Client" />
  <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>

Mon hypothèse est un échec, car Oracle n’est pas enregistré dans DbProviderFactories ou ailleurs

Comment enregistrer Oracle dans DbProviderFactories? Ou si ce n'est pas le cas, qu'est-ce qui ne va pas avec ma configuration?

6

Deviner.

Dans mon machine.config il y avait déjà 

<add name="Oracle Data Provider for .NET" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />

et puis cela a été répété dans mon web.config, ce qui empêcherait silencieusement de donner des fournisseurs. Donc après avoir sorti:

  <add name="Oracle Data Provider for .NET" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
  <remove invariant="Oracle.ManagedDataAccess.Client" />
  <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />

Je l'ai fait courir.

5

J'ai rencontré cette erreur lorsque j'ai mis à jour Visual Studio 2017 . L'erreur peut être résolue en réinstallant ODT pour VS 2017:

1) Fermez Visual Studio.

2) Désinstallez les outils de développement Oracle existants pour Visual Studio 2017 à partir du Panneau de configuration.

3) Installez le dernier (ODTforVS2017_122011.exe) à partir du lien suivant:

http://www.Oracle.com/technetwork/topics/dotnet/downloads/odacmsidownloadvs2017-3806459.html

4) Ouvrez Visual Studio et créez la solution. L’erreur ne devrait pas être générée maintenant.

4
Fnk

J'ai résolu ce problème en ajoutant ODP.NET (Oracle.ManagedDataAccess.EntityFramework 12c) de NuGet. J'utilise VS2015 avec EF 6.2.0.

2
kmxr

Je viens de résoudre cette erreur en installant l'outil Oracle Developer Tool pour Visual Studio 2013 (ma version VS installée) ODTforVS2013_121025.exe 

1
Nitin Patil