34 votes

Déploiement et configuration d'ODP.NET pour fonctionner sans installation avec Entity Framework

Comment déployer et configurer ODP.NET pour qu'il fonctionne sans installation avec Entity Framework ?

A. Comment déployer et configurer Oracle.DataAccess.Client ?

B. Comment déployer et configurer Oracle.ManagedDataAccess.Client ?

C. Que devez-vous faire pour que les constructions avec EDMXs avec Oracle SSDLs fonctionnent ?

D. Que devez-vous installer pour le support du designer ?

68voto

Danny Varod Points 8685

Cette réponse résume (nous l'espérons) toutes les étapes requises, dont beaucoup sont documentées à divers endroits en ligne et qui pourraient épargner à quelqu'un des heures de recherche sur Google.

A. Comment déployer et configurer Oracle.DataAccess.Client.

A.1. Télécharger ODAC112030Xcopy_64bit.zip o ODAC112030Xcopy_32bit.zip .

A.1.1. Extrayez le contenu des dossiers suivants du fichier zip dans le dossier bin/setup de votre application/hôte :

A.1.1.1. instantclient_11_2

A.1.1.2. odp.net4 \bin\

A.1.1.3. odp.net4 \odp.net\bin\

A.1.1.4. odp.net4 \odp.net\PublisherPolicy\4\

A.2. Ajoutez la section suivante au début du fichier app.config/web.config de votre application/hôte (si vous avez déjà un élément configSections, ajoutez-y la section :

<configSections>
  <section name="oracle.dataaccess.client"
    type="System.Data.Common.DbProviderConfigurationHandler, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>

A.3. Ajoutez les sections suivantes à la fin du fichier app.config/web.config de votre application/hôte :

A.4. Depuis le dossier de l'ODAC112030Xcopy, exécutez :

configure.bat odp.net4 somename

Je recommande d'utiliser oraclehome112030_32 ou oraclehome112030_64 comme "somename" ci-dessus.

<system.data>
  <DbProviderFactories>
    <!-- Remove in case this is already defined in machine.config -->
    <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=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
  </DbProviderFactories>
</system.data>

<oracle.dataaccess.client>
  <settings>
    <add name="bool" value="edmmapping number(1,0)" />
    <add name="byte" value="edmmapping number(3,0)" />
    <add name="int16" value="edmmapping number(5,0)" />
    <add name="int32" value="edmmapping number(10,0)" />
    <add name="int64" value="edmmapping number(19,0)" />
    <add name="int16" value="edmmapping number(38,0)" />
    <add name="int32" value="edmmapping number(38,0)" />
    <add name="int64" value="edmmapping number(38,0)" />
  </settings>
</oracle.dataaccess.client>

B. Comment déployer et configurer Oracle.ManagedDataAccess.Client.

B.1. Télécharger ODP.NET_Managed_1120350_Beta.zip

B.1.1. Extrayez les fichiers suivants dans le dossier bin/setup de votre application/hôte.

B.1.1.1. Oracle.ManagedDataAccess.dll

B.1.1.2. x64 \Oracle.ManagedDataAccessDTC.dll ou x86 \Oracle.ManagedDataAccessDTC.dll

B.2. Ajoutez la section suivante au début du fichier app.config/web.config de votre application/hôte (si vous avez déjà un élément configSections, ajoutez-y la section :

<configSections>
  <section name="oracle.manageddataaccess.client"
    type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.112.3.50, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</configSections>

B.3. Ajoutez les sections suivantes à la fin du fichier app.config/web.config de votre application/hôte :

<system.data>
  <DbProviderFactories>
    <!-- Remove in case this is already defined in machine.config -->
    <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.112.3.50, Culture=neutral, PublicKeyToken=89b483f429c47342" />
  </DbProviderFactories>
</system.data>

<oracle.manageddataaccess.client>
  <version number="*">
    <settings>
      <!-- Set this path if you are using TNS aliases as connection strings (not recommended) -->
      <!-- Instead you can use "SERVER_NAME:PORT/SERVICE_NAME" as your data source -->
      <setting name="TNS_ADMIN" value="C:\"/>
    </settings>
    <edmMappings>
      <edmMapping dataType="number">
        <add name="bool" precision="1"/>
        <add name="byte" precision="2" />
        <add name="int16" precision="5" />
      </edmMapping>
    </edmMappings>
  </version>
</oracle.manageddataaccess.client>

C. Pour le bâtiment :

C.1. Ajoutez cette section à l'app.config de l'assemblage de votre EDMX :

(Je n'ai pas essayé cela avec Oracle. Géré DataAccess.Client yet)

<oracle.dataaccess.client>
  <settings>
    <add name="bool" value="edmmapping number(1,0)" />
    <add name="byte" value="edmmapping number(3,0)" />
    <add name="int16" value="edmmapping number(5,0)" />
    <add name="int32" value="edmmapping number(10,0)" />
    <add name="int64" value="edmmapping number(19,0)" />
    <add name="int16" value="edmmapping number(38,0)" />
    <add name="int32" value="edmmapping number(38,0)" />
    <add name="int64" value="edmmapping number(38,0)" />
  </settings>
</oracle.dataaccess.client>

C.2. Ajouter un fichier nommé Oracle.xsd au même assemblage avec le contenu :

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="odpnetappconfigmappings" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:complexType name="addtype">
    <xs:attribute name="name" type="xs:string" />
    <xs:attribute name="value" type="xs:string" />
  </xs:complexType>

  <xs:complexType name="settingstype">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="add" type="addtype" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="oracledataaccessclienttype">
    <xs:sequence minOccurs="0" maxOccurs="1">
      <xs:element name="settings" type="settingstype" />
    </xs:sequence>
  </xs:complexType>

  <xs:element name="oracle.dataaccess.client" type="oracledataaccessclienttype" />

</xs:schema>

C.3. Ajoutez le XSD ci-dessus à la liste de schémas de l'app.config ci-dessus.

C.4. Si vous obtenez des erreurs pour les mappages booléens pendant la construction, même si celle-ci est réussie, ajoutez les mappages app.config au devenv.exe.config de Visual Studio.

C.5. Si vous voulez utiliser Oracle.ManagedDataAccess.Client, modifiez manuellement l'attribut du fournisseur de données dans l'EDMX avant la construction (je n'ai pas essayé) ou modifiez-le avant la création du contexte au moment de l'exécution et chargez la MSSL à partir de la copie modifiée au lieu de la ressource (cela semble fonctionner et j'utilise également une astuce similaire pour choisir quelle MSSL charger pour différents fournisseurs de BD).


D. Pour le support du designer :

D.1. Télécharger win64_11gR2_client.zip o win32_11gR2_client.zip et l'installer.

D.1.1. Sélectionnez "Administrateur" comme type d'installation.

D.2. télécharger ODT et l'installer.


J'ai essayé ceci (A et B) sur une machine vierge (VM) avec Windows 7 x64.

Cette procédure ne semble pas fonctionner avec la version x86 de Oracle.DataAccess.Client sur Windows x64.

La procédure semble fonctionner avec la version x64 d'Oracle.DataAccess.Client sur Windows x64 et avec les deux versions d'Oracle.ManagedDataAccess.Client.

13voto

Danny Varod Points 8685

Mise à jour :

Migration d'Oracle.DataAccess.Client vers Oracle.ManagedDataAccess.Client v12.1.0 (12c) de manière simple :

Edit : Lien de téléchargement pour l'ODAC géré v12c Release 1 .

Si vous téléchargez winx64_12c_client.zip o winnt_12c_client32.zip vous les extrayez et les installez (installation complète (administrateur) ou installation personnalisée avec le composant ODP.NET, l'installation client n'inclut pas ce composant) sur une VM, vous trouverez le dossier \odp.net\managed sous le dossier "client".

Dans ce dossier, vous trouverez common\Oracle.ManagedDataAccess.dll , x86\Oracle.ManagedDataAccessDTC.dll y x64\Oracle.ManagedDataAccessDTC.dll .

Copie Oracle.ManagedDataAccess.dll dans votre répertoire bin et soit copier la bonne plateforme de Oracle.ManagedDataAccessDTC.dll sous votre répertoire bin x86/x64 ou, par client, installez la plateforme correcte de cette DLL spécifique dans le GAC, en gardant votre bin comme AnyCPU.

La version d'assemblage de la nouvelle DLL est 4.121.1.0 le PublicKeyToken semble être le même (je ne l'ai pas vérifié, mais il a fonctionné sans que je le change).

Comme précédemment, ajoutez cette section à votre app.config configuration/configSections (au début du fichier app.config) :

<configuration>
   <configSections>

Section :

    <section name="oracle.manageddataaccess.client"
        type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />

et fermer avec :

</configSections>

Sous system.data/DbProviderFactories (après ce qui précède) :

<system.data>
  <DbProviderFactories>

ajouter :

    <remove invariant="Oracle.DataAccess.Client" />
    <remove invariant="Oracle.ManagedDataAccess.Client" />

Pour être sûr de ne pas avoir de conflits dans votre machine.config

puis ajoutez :

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

et fermer avec :

  </DbProviderFactories>
</system.data>

Avis J'ai utilisé Oracle.DataAccess.Client comme invariant au lieu de l'officiel Oracle.ManagedDataAccess.Client . En effet, je ne veux pas modifier tous mes EDMX et recompiler leurs assemblages pour qu'ils utilisent le nouveau client géré au lieu de l'ancien non géré.

Ensuite, ajoutez la section suivante (après la section ci-dessus) à votre app.config

 <oracle.manageddataaccess.client>
    <version number="*">
      <edmMappings>
        <edmMapping dataType="number">
          <add name="bool" precision="1"/>
          <add name="byte" precision="2" />
          <add name="int16" precision="5" />
        </edmMapping>
      </edmMappings>
    </version>
  </oracle.manageddataaccess.client>

J'ai réussi mes premiers tests, mais je n'ai pas encore fait de tests approfondis.

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