sql >> Base de Datos >  >> RDS >> Oracle

Implementación y configuración de ODP.NET para que funcione sin instalación con Entity Framework

Esta respuesta resume (con suerte) todos los pasos necesarios, muchos de los cuales están documentados en varios lugares en línea y podrían ahorrarle a alguien horas de búsqueda en Google.

A. Cómo implementar y configurar Oracle.DataAccess.Client.

A.1. Descargue ODAC112030Xcopy_64bit.zip o ODAC112030Xcopy_32bit.zip.

A.1.1. Extraiga el contenido de las siguientes carpetas dentro del archivo zip en la carpeta bin/setup de su aplicación/host:

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. Agregue la siguiente sección al principio de app.config/web.config de su aplicación/host (si ya tiene un elemento configSections, agréguele la sección:

<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. Agregue las siguientes secciones al final de app.config/web.config de su aplicación/host:

A.4. Desde la carpeta ODAC112030Xcopy Ejecutar:

configure.bat odp.net4 somename

Recomiendo usar oraclehome112030_32 u oraclehome112030_64 como "algún nombre" anterior.

<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. Cómo implementar y configurar Oracle.ManagedDataAccess.Client.

B.1. Descargar ODP.NET_Managed_1120350_Beta.zip

B.1.1. Extraiga los siguientes archivos en la carpeta bin/setup de su aplicación/host.

B.1.1.1. Oracle.ManagedDataAccess.dll

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

B.2. Agregue la siguiente sección al principio de app.config/web.config de su aplicación/host (si ya tiene un elemento configSections, agréguele la sección:

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

B.3. Agregue las siguientes secciones al final de app.config/web.config de su aplicación/host:

<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. Para la construcción:

C.1. Agregue esta sección a la aplicación.config de la asamblea de su EDMX:

(No he probado esto con Oracle. Administrado DataAccess.Client todavía)

<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. Agregue un archivo llamado Oracle.xsd al mismo ensamblado con el contenido:

<?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. Agregue el XSD anterior a la lista de esquemas de app.config anterior.

C.4. Si obtiene errores para las asignaciones booleanas durante la compilación aunque la compilación se realice correctamente, agregue las asignaciones de app.config a devenv.exe.config de Visual Studio.

C.5. Si desea utilizar Oracle.ManagedDataAccess.Client, edite el atributo del proveedor de datos en EDMX manualmente antes de la compilación (no lo he probado) o edítelo antes de la creación de Contexto en tiempo de ejecución y cargue MSSL desde la copia editada en lugar de desde recurso (esto parece funcionar y también uso un truco similar para elegir qué MSSL cargar para diferentes proveedores de bases de datos).



D. Para soporte de diseñador:

D.1. Descargue win64_11gR2_client.zip o win32_11gR2_client.zip e instálelo.

D.1.1. Seleccione "Administrador" como tipo de instalación.

D.2. descargue ODT e instálelo.



Probé esto (A y B) en una máquina en blanco (VM) con Windows 7 x64.

Este procedimiento no parece funcionar con la versión x86 de Oracle.DataAccess.Client en Windows x64.

El procedimiento parece funcionar con la versión x64 de Oracle.DataAccess.Client en Windows x64 y con ambas versiones de Oracle.ManagedDataAccess.Client.