Подтвердить что ты не робот

Развертывание и настройка ODP.NET для работы без установки с Entity Framework

Как вы развертываете и настраиваете ODP.NET для работы без установки с Entity Framework?

а. Как развернуть и настроить Oracle.DataAccess.Client?

В. Как развернуть и настроить Oracle.ManagedDataAccess.Client?

С. Что вам нужно сделать, чтобы создавать сборки с EDMX с помощью Oracle SSDL?

Д. Что вам нужно установить для поддержки дизайнеров?

4b9b3361

Ответ 1

Этот ответ суммирует (надеюсь) все необходимые шаги, многие из которых задокументированы в разных местах в Интернете и могут сэкономить время в Google Googling.

а. Как развернуть и настроить Oracle.DataAccess.Client.

А .1. Загрузите ODAC112030Xcopy_64bit.zip или ODAC112030Xcopy_32bit.zip.

A.1.1. Извлеките содержимое следующих папок в zip файле в папку приложения/хоста/установки:

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\

А .2. Добавьте следующий раздел в начало вашего приложения /host app.config/web.config(если у вас уже есть элемент configSections, добавьте в него раздел:

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

А .3. Добавьте следующие разделы в конец вашего приложения /host app.config/web.config:

А .4. Из папки ODAC112030Xcopy Run:

configure.bat odp.net4 somename

Я рекомендую использовать oraclehome112030_32 или oraclehome112030_64 как "somename" выше.

<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>




В. Как развернуть и настроить Oracle.ManagedDataAccess.Client.

B.1. Загрузите ODP.NET_Managed_1120350_Beta.zip

В .1.1. Извлеките следующие файлы в папку вашего приложения/хоста/установки.

B.1.1.1. Oracle.ManagedDataAccess.dll

B.1.1.2. x64\Oracle.ManagedDataAccessDTC.dll или x86\Oracle.ManagedDataAccessDTC.dll

В .2. Добавьте следующий раздел в начало вашего приложения /host app.config/web.config(если у вас уже есть элемент configSections, добавьте в него раздел:

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

В .3. Добавьте следующие разделы в конец вашего приложения /host app.config/web.config:

<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.1. Добавьте этот раздел в сборку EDMX app.config:

(Не пробовал это с Oracle. Управляемый DataAccess.Client еще)

<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>

С .2. Добавьте файл с именем Oracle.xsd в ту же сборку с содержимым:

<?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>

С .3. Добавьте вышеуказанный XSD в приведенный выше список приложений app.config.

С .4. Если вы получаете ошибки для логических сопоставлений во время сборки, даже если сборка выполнена успешно, добавьте сопоставления app.config в Visual Studio devenv.exe.config.

С .5. Если вы хотите использовать Oracle.ManagedDataAccess.Client, либо отредактируйте атрибут поставщика данных в EDMX вручную перед сборкой (я этого не пробовал), либо отредактировал его до создания Контекста во время выполнения и загрузил MSSL из отредактированной копии, а не из ресурс (это, похоже, работает, и я также использую подобный трюк, чтобы выбрать, какой MSSL загружать для разных поставщиков БД).




Д. Для поддержки дизайнера:

D.1. Загрузите win64_11gR2_client.zip или win32_11gR2_client.zip и установите.

D.1.1. Выберите тип "Администратор" в качестве типа установки.

Д .2. скачать ODT и установить.




Я попробовал это (A и B) на пустой машине (VM) с Windows 7 x64.

Эта процедура, похоже, не работает с x86-версией Oracle.DataAccess.Client в Windows x64.

Эта процедура, похоже, работает с x64-версией Oracle.DataAccess.Client в Windows x64 и с обеими версиями Oracle.ManagedDataAccess.Client.

Ответ 2

Update:

Переход из Oracle.DataAccess.Client в Oracle.ManagedDataAccess.Client v12.1.0 (12c) простой способ:

Изменить: Загрузить ссылку для управляемого ODAC v12c Release 1.


Если вы загрузите winx64_12c_client.zip или winnt_12c_client32.zip, извлеките их и установить (полная (административная) установка или пользовательская установка с компонентом ODP.NET, установка клиента не включает этот компонент) на виртуальной машине, вы найдете папку \odp.net\managed в папке "клиент".

В этой папке вы найдете common\Oracle.ManagedDataAccess.dll, x86\Oracle.ManagedDataAccessDTC.dll и x64\Oracle.ManagedDataAccessDTC.dll.

Скопируйте Oracle.ManagedDataAccess.dll в каталог вашего bin и скопируйте правильную платформу Oracle.ManagedDataAccessDTC.dll в вашем каталоге x86/x64 bin или, на клиент, установите правильную платформу этой конкретной DLL в GAC, сохраняя ваш bin как AnyCPU.

Сборочная версия новой DLL 4.121.1.0, PublicKeyToken, похоже, одинакова (не проверял, но работал без меня, меняя ее).

Как и прежде, добавьте этот раздел в конфигурацию /configSections app.config (в начале файла app.config):

<configuration>
   <configSections>

Раздел:

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

и закрыть с помощью

</configSections>

В файле system.data/DbProviderFactories (после вышесказанного):

<system.data>
  <DbProviderFactories>

добавить:

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

Чтобы убедиться, что у вас нет конфликтов в файле machine.config

затем добавьте:

  <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" />

и закрыть с помощью

  </DbProviderFactories>
</system.data>

Примечание Я использовал Oracle.DataAccess.Client как инвариант вместо официального Oracle.ManagedDataAccess.Client. Это связано с тем, что я не хочу менять все свои EDMX и перекомпилировать их сборки, чтобы заставить их использовать новый управляемый клиент вместо старого неуправляемого.

Затем добавьте следующий раздел (после вышесказанного) в файл 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>

Это прошло мое первоначальное тестирование, но еще не протестировано.