Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Bereitstellen und Konfigurieren von ODP.NET für die Arbeit ohne Installation mit Entity Framework

Diese Antwort fasst (hoffentlich) alle erforderlichen Schritte zusammen, von denen viele an verschiedenen Stellen online dokumentiert sind und jemandem stundenlanges Googlen ersparen könnten.

A. Bereitstellung und Konfiguration von Oracle.DataAccess.Client.

A.1. Laden Sie ODAC112030Xcopy_64bit.zip oder ODAC112030Xcopy_32bit.zip herunter.

A.1.1. Extrahieren Sie den Inhalt der folgenden Ordner in der ZIP-Datei in den bin/setup-Ordner Ihrer Anwendung/Ihres Hosts:

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. Fügen Sie den folgenden Abschnitt am Anfang der app.config/web.config Ihrer Anwendung/des Hosts hinzu (wenn Sie bereits ein configSections-Element haben, fügen Sie den Abschnitt hinzu:

<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. Fügen Sie die folgenden Abschnitte am Ende der app.config/web.config Ihrer Anwendung/des Hosts hinzu:

A.4. Aus dem Ordner von ODAC112030Xcopy Run:

configure.bat odp.net4 somename

Ich empfehle die Verwendung von oraclehome112030_32 oder oraclehome112030_64 als "somename" oben.

<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. Bereitstellen und Konfigurieren von Oracle.ManagedDataAccess.Client.

B.1. Laden Sie ODP.NET_Managed_1120350_Beta.zip

herunter

B.1.1. Extrahieren Sie die folgenden Dateien in den bin/setup-Ordner Ihrer Anwendung/Ihres Hosts.

B.1.1.1. Oracle.ManagedDataAccess.dll

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

B.2. Fügen Sie den folgenden Abschnitt am Anfang der app.config/web.config Ihrer Anwendung/des Hosts hinzu (wenn Sie bereits ein configSections-Element haben, fügen Sie den Abschnitt hinzu:

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

B.3. Fügen Sie die folgenden Abschnitte am Ende der app.config/web.config Ihrer Anwendung/des Hosts hinzu:

<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. Zum Bauen:

C.1. Fügen Sie diesen Abschnitt zur app.config Ihrer EDMX-Assembly hinzu:

(Habe dies nicht mit Oracle versucht.Verwaltet DataAccess.Client noch)

<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. Fügen Sie derselben Assembly eine Datei namens Oracle.xsd mit folgendem Inhalt hinzu:

<?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. Fügen Sie die obige XSD zur Schemaliste der obigen app.config hinzu.

C.4. Wenn Sie während des Builds Fehler für boolesche Zuordnungen erhalten, obwohl der Build erfolgreich ist, fügen Sie die app.config-Zuordnungen zu devenv.exe.config von Visual Studio hinzu.

C.5. Wenn Sie Oracle.ManagedDataAccess.Client verwenden möchten, bearbeiten Sie entweder das Datenanbieterattribut im EDMX manuell vor dem Build (ich habe dies nicht versucht) oder bearbeiten Sie es vor der Erstellung des Kontexts zur Laufzeit und laden Sie MSSL aus der bearbeiteten Kopie statt aus Ressource (dies scheint zu funktionieren und ich verwende auch einen ähnlichen Trick, um auszuwählen, welche MSSL für verschiedene DB-Anbieter geladen werden soll).



D. Für Designer-Support:

D.1. Laden Sie win64_11gR2_client.zip oder win32_11gR2_client.zip herunter und installieren Sie es.

D.1.1. Wählen Sie als Installationstyp "Administrator" aus.

D.2. ODT herunterladen und installieren.



Ich habe dies (A und B) auf einer leeren Maschine (VM) mit Windows 7 x64 versucht.

Dieses Verfahren scheint mit der x86-Version von Oracle.DataAccess.Client unter Windows x64 nicht zu funktionieren.

Das Verfahren scheint mit der x64-Version von Oracle.DataAccess.Client unter Windows x64 und mit beiden Versionen von Oracle.ManagedDataAccess.Client zu funktionieren.