2012-12-14 3 views
1

J'ai développé une nouvelle application qui utilise Entity Framework pour accéder à une base de données Oracle. Cela fonctionne comme prévu localement, en utilisant la dernière version de ODP.NET. J'essaye maintenant de déployer cette application sur un serveur de production exécutant beaucoup d'autres applications héritées. Idéalement, j'aimerais que ma nouvelle application utilise ses propres DLL ODP.NET/Oracle et ne modifie pas l'installation d'Oracle existante sur le serveur prod.Déploiement d'Oracle Instant Client aux côtés d'installations Oracle existantes

J'ai suivi ce guide:

http://jeremybranham.wordpress.com/2011/04/25/oracle-instant-client-with-odp-net/

Ce qui semble avoir eu un certain succès sur la base des commentaires.

Cependant, je reçois l'exception suivante lors d'une tentative de créer les entités objet:

Exception externe

Exception has been thrown by the target of an invocation. 

Exception intérieure

The type initializer for 'Oracle.DataAccess.Client.OracleClientFactory' threw an exception. 
at System.RuntimeFieldHandle.GetValue(RtFieldInfo field, Object instance, RuntimeType fieldType, RuntimeType declaringType, Boolean& domainInitialized) 
at System.Reflection.RtFieldInfo.InternalGetValue(Object obj, Boolean doVisibilityCheck, Boolean doCheckConsistency) 
at System.Reflection.RtFieldInfo.GetValue(Object obj) 
at System.Data.Common.DbProviderFactories.GetFactory(DataRow providerRow) 
at System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) 
at System.Data.EntityClient.EntityConnection.GetFactory(String providerString) 
at System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString) 
at System.Data.EntityClient.EntityConnection..ctor(String connectionString) 
at System.Data.Objects.ObjectContext.CreateEntityConnection(String connectionString) 
at System.Data.Objects.ObjectContext..ctor(String connectionString, String defaultContainerName) 
at MyAppMVC.Models.DataModels.STSProcedureEntities..ctor() 
at MyAppMVC.Services.MyService.GetPersons(String lastName) 

Répondre

0

répondre à ma propre question ici . Nous avons finalement installé une deuxième version d'Oracle, en utilisant les paramètres par défaut qui placent la nouvelle version dans un dossier client_2.

  • D: \ oracle \ product \ 11.2.0 \ client (ancienne version)
  • D: \ oracle \ product \ 11.2.0 \ client_2 (nouvelle version)

Le seul supplémentaire L'étape d'installation tombait dans le précédent fichier TNSNAMES.ORA dans le nouveau client_2. Ce fichier se trouve dans client \ network \ admin en utilisant le chemin de fichier ci-dessus. Parce que toutes nos applications étaient configurées pour rechercher spécifiquement leurs versions Oracle correctes (SpecificVersion = true), tout fonctionnait généralement sans modification. Pour ceux qui ne l'ont pas fait, nous avons dû déposer l'ancienne version de Oracle.DataAccess.dll (du client, pas client_2) dans le dossier bin de cette application.

1

Bien que vous sembliez avoir résolu votre problème en installant un client supplémentaire, vous pourriez avoir ajouté la configuration suivante dans votre fichier app/web.config.

<system.data> 
    <DbProviderFactories> 
     <remove invariant="Oracle.DataAccess.Client" /> 
     <add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET" 
      type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, 
      PublicKeyToken=89b483f429c47342"/> 
    </DbProviderFactories> 
    </system.data> 

Et a supprimé les fichiers binaires dans votre dossier bin local.

Questions connexes