Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Implantando e configurando o ODP.NET para funcionar sem instalação com o Entity Framework


Esta resposta resume (espero) todas as etapas necessárias, muitas das quais documentadas em vários lugares on-line e podem economizar horas de pesquisa no Google.

A. Como implantar e configurar Oracle.DataAccess.Client.

A.1. Baixe ODAC112030Xcopy_64bit.zip ou ODAC112030Xcopy_32bit.zip.

A.1.1. Extraia o conteúdo das seguintes pastas dentro do arquivo zip na pasta bin/setup do seu aplicativo/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. Adicione a seguinte seção ao início do app.config/web.config do seu aplicativo/host (se você já tiver um elemento configSections, adicione a seção a ele:
<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. Adicione as seguintes seções ao final do app.config/web.config do seu aplicativo/host:

A.4. Na pasta do ODAC112030Xcopy Execute:
configure.bat odp.net4 somename

Eu recomendo usar oraclehome112030_32 ou oraclehome112030_64 como o "somename" acima.
<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. Como implantar e configurar Oracle.ManagedDataAccess.Client.

B.1. Baixar ODP.NET_Managed_1120350_Beta.zip

B.1.1. Extraia os seguintes arquivos na pasta bin/setup do seu aplicativo/host.

B.1.1.1. Oracle.ManagedDataAccess.dll

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

B.2. Adicione a seguinte seção ao início do app.config/web.config do seu aplicativo/host (se você já tiver um elemento configSections, adicione a seção a ele:
<configSections>
  <section name="oracle.manageddataaccess.client"
    type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.112.3.50, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</configSections>

B.3. Adicione as seguintes seções ao final do app.config/web.config do seu aplicativo/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 construção:

C.1. Adicione esta seção ao app.config do assembly do EDMX:

(Não tentei isso com Oracle.Gerenciado DataAccess.Client ainda)
<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. Adicione um arquivo chamado Oracle.xsd ao mesmo assembly com o conteúdo:
<?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. Adicione o XSD acima à lista de esquemas do app.config acima.

C.4. Se você estiver recebendo erros para mapeamentos booleanos durante a compilação, mesmo que a compilação seja bem-sucedida, adicione os mapeamentos app.config ao devenv.exe.config do Visual Studio.

C.5. Se você quiser usar o Oracle.ManagedDataAccess.Client, edite o atributo do provedor de dados no EDMX manualmente antes da compilação (não tentei isso) ou edite-o antes da criação do Context em tempo de execução e carregue o MSSL da cópia editada em vez de resource (isso parece funcionar e também uso um truque semelhante para escolher qual MSSL carregar para diferentes provedores de banco de dados).





D. Para suporte ao designer:

D.1. Baixe win64_11gR2_client.zip ou win32_11gR2_client.zip e instale.

D.1.1. Selecione "Administrador" como tipo de instalação.

D.2. baixe o ODT e instale.





Eu tentei isso (A e B) em uma máquina em branco (VM) com Windows 7 x64.

Este procedimento parece não funcionar com a versão x86 do Oracle.DataAccess.Client no Windows x64.

O procedimento parece funcionar com a versão x64 do Oracle.DataAccess.Client no Windows x64 e com ambas as versões do Oracle.ManagedDataAccess.Client.