web-dev-qa-db-fra.com

Déployer et configurer 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 builds avec EDMX avec Oracle SSDL fonctionnent?

D. De quoi avez-vous besoin pour installer le support du concepteur?

33
Danny Varod

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

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

A.1. Téléchargez ODAC112030Xcopy_64bit.Zip ou ODAC112030Xcopy_32bit.Zip .

A.1.1. Extrayez le contenu des dossiers suivants dans le fichier Zip dans votre application/bin de l'hôte/dossier d'installation:

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. À partir du dossier ODAC112030Xcopy, exécutez:

configure.bat odp.net4 somename

Je recommande d'utiliser oraclehome112030_32 ou oraclehome112030_64 comme "nom" 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 votre application/dossier de l'hôte/dossier d'installation.

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 la construction:

C.1. Ajoutez cette section au fichier app.config de votre assemblage EDMX:

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

<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. Ajoutez un fichier nommé Oracle.xsd au même assembly 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 app.config ci-dessus.

C.4. Si vous obtenez des erreurs pour les mappages booléens pendant la génération, même si la génération réussit, ajoutez les mappages app.config au devenv.exe.config de Visual Studio.

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




D. Pour le support du concepteur:

D.1. Téléchargez win64_11gR2_client.Zip ou win32_11gR2_client.Zip et installez.

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

D.2. téléchargez ODT et installez.




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 d'Oracle.DataAccess.Client sous Windows x64.

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

67
Danny Varod

Mise à jour:

Migration d'Oracle.DataAccess.Client vers Oracle.ManagedDataAccess.Client v12.1.0 (12c) en toute simplicité:

Modifier: lien de téléchargement pour la version 1 gérée d'ODAC v12c .


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

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

Copie Oracle.ManagedDataAccess.dll dans votre répertoire bin et copiez la plate-forme correcte de Oracle.ManagedDataAccessDTC.dll sous votre répertoire bin x86/x64 ou, par client, installez la plate-forme correcte de ce DLL DLL dans le GAC, en gardant votre bin en tant que AnyCPU.

La version Assembly du nouveau DLL est 4.121.1.0 , le PublicKeyToken semble être le même (n'a pas vérifiez-le, mais cela 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 fermez 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 vous assurer que vous n'avez aucun conflit dans votre machine.config

puis ajouter:

  <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 fermez avec:

  </DbProviderFactories>
</system.data>

Remarque J'ai utilisé Oracle.DataAccess.Client comme invariant au lieu de l'officiel Oracle.ManagedDataAccess.Client. C'est parce que je ne veux pas changer tous mes EDMX et recompiler leurs assemblys pour les amener à utiliser le nouveau client géré au lieu de l'ancien non géré.

Ajoutez ensuite la section suivante (après ce qui précède) à 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>

Cela a passé mes tests initiaux, mais je n'ai pas encore testé complètement.

13
Danny Varod

Installez les composants d'accès aux données Oracle (ODAC) 32 bits avec les outils de développement Oracle pour Visual Studio à partir du lien ci-dessous:

http://www.Oracle.com/technetwork/topics/dotnet/utilsoft-086879.html

0
Ajay Shankar