Развертывание и настройка ODP.NET для работы без установки с Entity Framework
Как развернуть и настроить ODP.NET для работы без установки с Entity Framework?
A. Как развернуть и настроить Oracle.DataAccess.Client?
B. Как развернуть и настроить Oracle.ManagedDataAccess.Client?
В. Что нужно сделать, чтобы заставить работать сборки с EDMX с Oracle SSDL?
D. Что нужно установить для поддержки дизайнера?
3 ответа
Этот ответ суммирует (надеюсь) все необходимые шаги, многие из которых задокументированы в различных местах в Интернете и могут сэкономить кому-то часы поиска в Google.
A. Как развернуть и настроить Oracle.DataAccess.Client.
A.1. Загрузите ODAC112030Xcopy_64bit.zip или ODAC112030Xcopy_32bit.zip.
A.1.1. Извлеките содержимое следующих папок в zip-файле в папку bin/setup вашего приложения / хоста:
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. Добавьте следующий раздел в начало 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. Добавьте следующие разделы в конец app.config / web.config вашего приложения / хоста:
А.4. Из папки ODAC112030Xcopy запустите:
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
B.1.1. Извлеките следующие файлы в папку вашего приложения / хоста bin/setup.
B.1.1.1. Oracle.ManagedDataAccess.dll
B.1.1.2. x64 \ Oracle.ManagedDataAccessDTC.dll или x86\Oracle.ManagedDataAccessDTC.dll
БИ 2. Добавьте следующий раздел в начало 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. Добавьте следующие разделы в конец 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. Для строительства:
C.1. Добавьте этот раздел в app.config сборки EDMX:
(Еще не пробовал это с 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 в файл devenv.exe.config в Visual Studio.
С.5. Если вы хотите использовать Oracle.ManagedDataAccess.Client, либо отредактируйте атрибут поставщика данных в EDMX вручную перед сборкой (я не пробовал этого), либо отредактируйте его до создания контекста во время выполнения и загрузите MSSL из отредактированной копии вместо из ресурс (это, кажется, работает, и я также использую подобную уловку, чтобы выбрать, какой MSSL загружать для разных поставщиков БД).
D. Для дизайнерской поддержки:
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.
Обновить:
Миграция из Oracle.DataAccess.Client в Oracle.ManagedDataAccess.Client v12.1.0 (12c) простым способом:
Изменить: Ссылка для скачивания для управляемого ODAC v12c Release 1.
Если вы загрузите winx64_12c_client.zip или winnt_12c_client32.zip, распакуете их и установите (полная (admin) установка или выборочная установка с компонентом ODP.NET, установка клиента не включает этот компонент) на ВМ, вы найдете папку \odp.net\managed
в папке "клиент".
В этой папке вы найдете common\Oracle.ManagedDataAccess.dll
, x86\Oracle.ManagedDataAccessDTC.dll
а также x64\Oracle.ManagedDataAccessDTC.dll
,
копия Oracle.ManagedDataAccess.dll
в каталог bin и либо скопируйте правильную платформу Oracle.ManagedDataAccessDTC.dll
в каталоге bin вашего x86/x64 или, для каждого клиента, установите правильную платформу этой конкретной DLL в GAC, сохраняя ваш bin как AnyCPU.
Версия новой DLL для сборки - 4.121.1.0, PublicKeyToken, кажется, такой же (не проверял, но он работал без изменения).
Как и раньше, добавьте этот раздел в конфигурацию app.config / configSections (в начале файла 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" />
Чтобы убедиться, что у вас нет конфликтов на вашем компьютере.
затем добавьте:
<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>
Это прошло мое первоначальное тестирование, хотя еще не проверил полностью.
Установите 32-битные компоненты доступа к данным Oracle (ODAC) с Oracle Developer Tools для Visual Studio по ссылке ниже:
http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html